I was able to achieve this by modifying InstancedStaticMesh source code to accept user-defined float instead of random float.
My modifications are described here: [https://markdownshare.com/view/a4b04e89-83bc-48bd-8ec5-229ab407f275][1]
Add Instance blueprint node now accepts an additional parameter:
And you can access this parameter in the material with PerInstanceRandom:
You can use any float value, but I noticed heavy glitches when the fractional component is zero. I am not sure why this happens, but I seemingly solved this by adding 0.5 to the integer before passing it to the instance and using floor operation to get the integer back in the material.
I used this to generate Minecraft-like voxel terrain. Here, grass, dirt, tree trunks and leaves all use the same quad mesh in a single Instanced Static Mesh for each 8x8 chunk of voxels (tall grass uses a separate mesh).