It seems to be the case that prefix: operators in lsearchd used to support multiple parameters via pipes (so prefix:foo|bar) which would treat them as an OR operation to look in multiple possible prefixes. I can't think of any sort of reason we can't do something similar. The use case is for search templates that want to look in a couple of places at once.
My biggest fear with that approach (while also long overdue and worthwhile) would make it more likely for people to run against query limits. Using | as a separator for values is long-accepted syntax in other places eg: api.php. Cleanup to query parsing should make it pretty easy to break these values on | (nb: skipping it for fields where it doesn't make sense).
This bug, along with a ton of others will really only be fixed by sane query parsing. It's terrible legacy behavior that stems from a need to rapidly prototype, in addition to emulating undocumented behaviors. We didn't start from a formal query language. Eventually someone is going to have to bite the bullet and do it.
I hope the end is in sight :)