isn't this all because runes are 32bit so fixed length, whereas strings are utf8 which is variable length, so no way to 'index' to a character, think of strings as compressed rune arrays.
unicode is a reference number for a glyph, runes and utf8 characters just encode that number differently.
understanding this, and if you wanted to index repeatedly into the same string, you could do one pass and record the address of each utf8 encoded character, then use that to get to the char, but addresses are same or larger than runes, so saving indexes to every 16'th, say, character then moving forward to the actual required might make sense if you had a lot of unchanging long strings.