The one thing that can fix the problem of grainy resolution is multiple pictures. If your super spiffy spy satellite grabs 5 images, 1 second apart, their pixels will be not be completely aligned with each other (think of two grids superimposed with some rotation and offsetting). I'm sure you could interpolate the subtle differences; probably a decent way would be to construct a higher resolution image, and precisely determine the alignment/rotation/stretching of each original image (the hard part). Then, you would find each of the high-resolution pixels based on the average of all the larger pixels that overlap the that place.

I wildly guess that you could at maximum quadruple the number of pixels (double each axis) with this technique (requiring, say, 8 images), and maybe quadruple that using image sharpening tweaks (i.e. compensating for the effects of finer pixels you already know). So, my wild guesses say you could get 2 cm resolution from 10 cm pictures, perhaps enough to read a plate, but I think I'm overestimating this method's ability.

Anyway, the atmosphere would probably interfere in some nasty way.