As with find & change, text variables, and section numbering, you cannot include real formatting in Index entries. There simply is no provision for formatting text that you input in the fields.
A possible workaround is to add 'formatting codes' into the index entries, and replace this with the correct formatting after generating the index. I would have suggested David's Automatically Format super/subscript trick (Auto Format Superscript and Subscript Numbers using GREP Styles), except … you happen to mention that “^7” yields a paragraph symbol. So his straightforward solution won't work.
The workaround is slightly more cumbersome to enter, but after that your index ought to be just fine every time you generate it.
1. Surround each of your superscripts with this: ^{text}, for example, to enter “x²” use “x^{2}”.
2. Surround each of your subscripts with this: _{text} — like this: “H_{2}O (water)”.
3. Create three character styles:
a. “HideMe” — set character color to “None” and horizontal scale to 1%.
b. “Super” — set character color to “Black”, horizontal scale to 100%, and position to Superscript.
c. “Sub” — same as Super, but with Subscript.
4. Add the following GREP styles to your Index Level 1 style (or any other style you are applying to the generated index text):
[_^]{.+?}
— apply character style “HideMe”.
(?<=^{).+?(?=})
— apply character style”Super”
(?<=_{).+?(?=})
— apply character style”Sub”.
The first character style effectively hides everything formatted with the codes ^{..} and _{..}, including all text in between. The Super and Sub styles make just the inside text visible again, and applies the correct formatting.
If you also want to include stuff like bold, italics, or underline, you can work out a similar system for these — all you have to do is add another code, and a character style that applies it.