Previously I started to implement “lower” indexes that would convert values to lower case before inserting into the index, but this did not work out.
I think it would be better to allow creating an index (or key) on a un-stored rule field (capitalized when created).
One of the problems with this is if you change the definition of the rule you would need to manually rebuild the index.
I think this would do what you want. It would avoid storing the data twice (but would still use space for the index).
You can specify the columns to IdControl so the user does not see the “extra” ones.