Jeff: you're absolutely right. A table of mime types and a table of mappings seems like the right thing. That does involve a data model change with potentially large impact (depending on the usage of the cr_mime_types table).
I'll put together a prototype of this at some point. Won't commit until I have the full fix. (and I want to focus on forums/notifications first, too).