> With utf-16 you can get O(1) string operations at a cost of doing them on code points rather than graphemes.
No you cannot. UTF-16 is a variable-length encoding (up to two 16-bit code units per code point).
> I think a lot of people totally discount the enormous cost that Latin-1 users are paying for CJK (etc) support they don’t use.
If we limit ourselves to Latin 1, UTF-16 requires 100% more memory than UTF-8. How often do you need to randomly access a long string anyway?