My proposed solution is to extend the print and strparam functions for ACS with the ability to reference "names" (globally available strings valid throughout the lifetime of the application) by their integer indexes.
The ACS print syntax is extended with the instruction "g: ‹name index›"
Decorate is extended with a new expression that takes any string and returns the permanent index of that string. It will have one, or one will be created automatically. Definition: int strIndex (string converttoindex)
Using this you can pass arbitrary class names, variable names, states and any other kind of message to a script that expects the index of a globally stored name.
It is assumed that the name index assignment is a deterministic process. As long as the executable remains unmodified, and the same (unmodified) wads are loaded in the same order, I expect that the name indexes will also be valid when loaded from previously save games. If this is not true, then the return value from STRindex would have to be considered a short-life value that should be used and discarded immediately (ideally not allowing a single tick to pass, which mandates the use of ACS_executewithresult for instant script triggering).
Spoiler: Example purposes