Combining as many sprites as possible in single texture really is a speed trick. I'd keep something like 512x512 a limit but sort sprites so that you only need to bind each texture once. Don't try to load too many textures at the beginning if there is a lot. Instead load on demand for texture sets where entering levels, replacing current ones if that is possible for the game.

I never used manual rotating over glRotate. I suppose if you could pre-calculate vertex coordinates (Just UP and LEFT vectors needed) for angles 0-359 with step 1 or some would make a difference, however it needs to be added to position vector. Scaling works fine with this too.

Thanks for the glDrawElements reminder i never really knew how to use it. It's of the bit harder part of OpenGL imo.