If you really want a fixed background image visible in the 3D Viewport (no matter what it looks like in the rendered image, you can go to the World Properties and - instead of using an Environment Texture in the Color like you would when using an HDRI to lighten the scene for example - choose Image Texture.
The advantage of Image Texture is that the default projection method is Flat, which doesn't exist in the Environment Texture (there's only Equirectangular and Mirror Ball), and so you can set the Vector to Window. This will show the image always filling up the window, either the viewport window or the camera's view window. This works in Material Preview and Rendered View, in Cycles and Eevee.

The only problem is, there is no good way to keep the aspect ratio of the image because it is always stretched to fit the viewport dimensions. IF you however want to change its size and placement in the viewport window, you can plug a Mapping node between Texture Coordinate and Image Texture.
- With Location you can move the image: -X/+X is right/left, -Y/+Y is up/down
- With Scale you can change the size, values < 1 to make it bigger than full screen, values > 1 smaller than full screen.
If you scale the image smaller than full screen, you can set the Image Texture instead of Repeat to either Extend, to stretch the image borders to the viewport borders, or Clip to leave the empty space black.
