(1) Add a 'subsystem type' integer to the subsystem structs, parse the original name on load, and set flags appropriately.
That way the original name can be changed immediately after the subsystem is loaded from the tbl, you get rid of extraneous stricmp() operations to determine what function the subsystem is supposed to have, and you centralize all the different subsystem functions (and toggling) to fewer locations in the code. If you need to look for what happens when you blow up an engine subsystem, all you need to do is do a search for SSF_ENGINE.
You could also add a 'display name' field for in-mission name changes later on, which wouldn't break the log, and wouldn't require a third 'subsystem name' char array.