Sounds like a problem with Expand, not the db size ¯\_(ツ)_/¯
If you just want to drill down over AlbumTypes->Artist->Album->tracks, I think that can be setup without Expand. I'm not the best guy to help there as I don't use MC for audio though. But I've seen people here with half a million tracks, and they don't report this kind of slowness.
You mention Expand causes a 3x slowdown... If it's taking 2 seconds per click now, that's better but I think it's still not normal. Anyone else with large collections can confirm, or report on their speeds please? It would be useful to know what's normal.
If everything is indexed, then the size of db does not influence the speed. Is really everything indexed ?
Regardless of indexing (ordering), if each record has 100 fields it doesn't matter if they're empty or not. Each record needs to contain a length/offset+data for each field. Having empty fields just means that the int32 representing the length of those fields is zero, but it still exists. When acessing a field's data, like [Album], MC still needs to get the Offset of that data within the record and the length of the contents. For performance, it doesn't matter at all if [Album] is at offset X or Y, or if there are other fields there with data or not. It's random access memory, not sequential. Once a record is loaded into memory (MC's memory or Windows I/O buffers), record size no longer matters.
To be clear: if you don't access a given field, there's no performance hit by just having it in the database. If you access it, then Indexing can of course help, specially if your expression asks for sorting or grouping by that field.