Does that mean it would be better for me to do something like Vlad86 is saying and just have a spritesheet of textures? They're all 32x32, so that wouldn't be hard per se, I'd just rather not have to do that if I don't have to....
Second, what would be the best way to draw that many tiles? Currently, I'm drawing 4 tiles with an ibo and using glDrawElements with a buffer offset into my index buffer....
There is a connection between those two. Generally one would want to draw as many tiles as possible with a single draw call. This is actually a good use case for instancing. This also means you pretty much have to do the spritesheet thing (which is preferable for performance anyway).
You can only have 48 textures bound AT ONCE...
Uh, you can query how many texture units there are from GL_MAX_TEXTURE_IMAGE units. The spec says it has to be at least 16 but it will vary between vendor/driver/card. On my laptop with AMD gpu it is for example 32. So you can't just state 48 as hard number.