You could have all the sprites on the same texture layed out in a grid and then use UV coords to determine which part of the texture they are on. That would allow you to only use one texture. But whether the setting of the UV coords is slower then changing texture for each I am not sure. In my own sprite engine I am using a layer technique, where each layer has its own texture assigned to it. This texture can be one sprite, or several sprites layed out on one texture. So when rendering I render one layer (texture) at a time. An I set the UV coords for each. So far for what I have been using it for, it has worked just fine, but I have not used it for anything with thousands of sprites.