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.