Another way is to always use GL_NEAREST, get the 4 surrounding texels at (u,v), (u+1,v) , (u,v+1), (u+1,v+1) in integers positions, and compute ourself the various interpolations that we want into the vertex shader.
(cf. emulate into the vertex shader a part of what make the texture unit in hardware)

I don't think that this is really the better way but with this we haven't the explosion of the number of textures/states when we want differents interpolations with the same texture/data ...