Shouldn't be an issue if you have some scripting experience.
I'm always been thick in scripting.
Ok, then you need to make similar checking for every field (or maybe use that IfElse structure). I need to go now so I can't make the expression for you right now but I can help later if someone else hasn't by the time I available again.
Try this:listbuild(1, /,, [Composer] - [Album] By [Conductor], [Artist], [Orchestra])IfElse(!IsEmpty([Date]), / - [Date])
Can you live with <unknown> for an empty value?
Finally, with listbuild, we can now get rid of the if() test:listbuild(1, / -/ , [Composer], listbuild(1, / By/ , [Album], listbuild(1, /,/ , [Conductor], [Artist], [Orchestra])), [Date])