There are several steps you can take to improving sprite/particle performance with OpenGL:
1. Use a
single sprite sheet like Riven said. This really should be the first optimization for
any game.
2. Batch all particle quads into a single list -- for example, glBegin, then draw each particle, then glEnd. This should be performant enough to render 5000+ sprites on modern hardware.
3. Simple culling -- don't render anything outside of your desired view.
4. Use GL_TRIANGLES and VBOs (or simple vertex arrays) to further improve performance, instead of immediate mode and glBegin/glEnd. This would probably lead to a LibGDX SpriteBatch-like implementation.
5. If geometry shaders are supported,
use them instead of rendering triangles.
6. If performance is still not suitable, look into specific optimizations such as storing velocity/position in a float texture, using OpenCL/CUDA, or what have you.
Generally you'll find your game is "fast enough" at step 3, and the rest exist more or less for the heck of it.