How many VAOs/VBOs/textures to use?

I’m working on GitHub - bfops/playform: Voxel sandbox project in Rust, and recently made the change to give each block its own VAO and VBO, to make it easy to texture them individually. However, all the syscalls to bind VAOs, VBOs, and textures make it slow. Is there a way to render them all without having to jump back to the CPU in between? Is this just too many objects? At what scale should VAOs and VBOs exist?

Thanks