Fade distant geometry into the background (EEVEE)
Rather than 'fade to transparency' you can, instead, 'fade to environment' with the fade acting between your mesh's actual shader and an Emission shader set to mimic the environment - this will avoid the problem of ‘backfaces’ or part-transparent faces showing through. This can be achieved with the following nodes :

Everything within the 'frame' is dealing with mapping the environment onto the surface of the mesh while the Diffuse shader at the top is there to represent your mesh's actual shader.
The Environment texture (an Environment node set to your HDR image) is normally driven by the Generated coordinates but in this case we generate the coordinate based on the Incoming vector. This will shade the point on the mesh with the point in the environment that would have been shown if the mesh was transparent - so effectively making it appear transparent by projecting the environment onto the surface. This is achieved by Vector Subtracting the Incoming vector from 0 (to effectively reverse the ray’s direction). The output of the Environment node drives an Emission shader with its strength set to 1.0 to mimic the environment.
The other nodes calculate the 'fade' based on distance - but only for 'Camera' rays (since we don't want the 'fade' to affect how the mesh interacts with the rest of the lighting of the scene, only how it appears to the camera. The Divide controls how far away from the camera the scene should fade, while the Color Ramp affects the profile of the fade (change those to affect the 'hardness' and distance of the fade).
This can produce the following result :

You would need to do the above for all of the materials in your scene that want to be affected by the fade (in the case of the above example, just the plain floor - so that it blends into the HDRI background of the scene (which provide the trees)).