
Instead of assigning different textures to different meshes you assign the same texture to all meshes, then select a layer via texture coordinates.
Change your texture coordinates from 2D to 3D. The z dimension selects a layer from the array: (0, 0, 0) is at the corner of the first layer, (0, 0, 1) is at the corner of the second layer, etc. This will get you bleed-free, mipmapped texturing without any state switches.
But it doesn't really matter if you don't change your data because you're still gonna have 1,000 tiny meshes and 1,000 draw calls.
@slime can you split this thread? This discussion doesn't really belong here.