I did various attempts at this in the past since my job involves doing exactly this. So far, I have resorted to do this in 2D post most of the time. Doing this in 3d with mapped faces may work (and look good), but you need to make sure they are facing the camera more or less, als you can run into many issues if the scene/camera is not static. It's pretty limited.
Doing this with anything other than a planar geometry (such as a sphere) will not be satisfactory. I've requested a ray travel distance map long ago for exactly this reason (among others). With a map like this you would be able to change the IOR depending on ray travel distance inside a geometry/volume. For example, using a sphere, you would specify the IOR to be 1.0 at the outside of the mesh and change it to 1.05 for example after 50cm, adding a slight noise somewhere in that map would then give you the heat haze effect. That way, the transition would be soft and any volumetric geometry would look fine without any tricks. However, this would probably involve ray marching calculations which would then slow down rendering a lot. In other cases, a map like this could be used to change a volume's color (or SSS color) based on a ray's depth within a geometry.
IIRC, PhoenixFD has an option to do this when rendering with Vray, I guess it's done in a similar way.