Sure, but for most languages older than a few years this ship has sadly long sailed and few would be willing to switch to O(n) indexing.
> It's much better to mess up in not having a clear distinction between bytes and text (annoying, but mostly easy to work around)
Except when it's not and the packages you're trying to use simply do not work and fuck up mightily with non-ascii data.
> then to mess up by having constant-time indexable utf-32 as python3 does
It's funny that just above you praise Erlang which does exactly that. Meanwhile Python 3.3 introduced a flexible string representation so depending on the content of the string the internal string encoding may be ISO-8859-1, UCS2 or UCS4 (and yes sadly only these as the designers refused to break the constant-time indexing guarantee).