An alternative to using bindless textures for getting a different texture per quad is using a texture array.

Basically this means using glTexSubImage3D to upload the different textures to different "z" indices of the texture. Every 3.0 implementation must support at least 256 Z layers per 2D array which is plenty for the HMH assets. Every layer must be the same size though.