i think you want to avoid anomalies, such as one of the hashes having multiple same values once upper/lower-cased, e.g. McGirk and Mcgirk...which would break under current arrangements. might be an idea to have the hashes keyed by lowercase/uppercase, but also store original print/visual/mixed-case value as part of the hashes.
the hardest line to type correctly is: stty erase ^H