I have two expression fields that set their values to Artist or Composer depending on the genre, then use them in the display header as appropriate. That does not solve the column header problem in the list, but at least the display header has the information that I want in the right places. You might be able to adapt this to your needs.
autosort = if(isequal([Genre],Classical,8),[Composer],[Artist])
and
autosort1 = if(isequal([Genre],Classical,8),[Artist],[Composer])
Then in the 2 header lines
[Autosort] - [Name] if(isempty([People]),,with [People]) if(isempty([Autosort1]),,by [Autosort1])
and
[Album] [Elapsed Time] // [Total Time] [PN Position] of [PN Tracks] if(compare([Bit Depth],>,16),[Bit Depth]//formatnumber([Sample Rate],0), ) [Library] [Zone]
Actually, I have put in the Computer tag for most of my non-classical also. It is nice to know the composer, when known, for non-classical also. It saves me from comstantly saying "Oh, who did that originally", especially for things like folk music.
You can also shrink the composer column to its smallest possible value in the list when not playing classical, assuming you are not jumping back and forth a lot. You end up with 3 dots, but that can be better than a big blank field.