The answer here shows how to add extended unicode characters to the body of a Text Object
For the subscript digits it's this range.
obj = bpy.data.objects['Text']
start_char = ord(u'\u2080')
end_char = ord(u'\u2089') + 1
subscript = ''.join([chr(i) for i in range(start_char, end_char)])
obj.data.body = 'Regular' + subscript
The above image uses a font called "Junicode". Support for the sub/super script characters depends on the font you pick. Blender's default font (Bfont) has limited extended characters. You can find many good unicode TrueType fonts with extensive extended character sets.
For more superscript and subscript unicode sequences see the tables here:
Unicode subscript and superscript block
Add a Driver to the
offset_x parameter of the superscript text object, to tell it to update its value based on the
obj.dimensions component of the regular script text Object.
You'll have to enable Auto Run Python Scripts from UserPreferences > File
You tweak the superscript
offset_y to look right, and you might also include some default spacing between the regular script and superscript, here I added
0.1 to the width of the regular script to avoid getting too cramped.
Reasons not to use parenting or drivers
In quality typefaces (fonts) a lot of effort is put into the spacing between letters to make all letter combinations look as good as possible. Adjacent letters should never be too close or too far apart. Find a good font where this is implemented and you'll save yourself a lot of work.
Valid reason to use parent or drivers
If you need superscript and subscript at the same time. Blender isn't a dedicated typesetting tool for notation like LaTeX, and provides no convenient syntax for it. The suggested work-arounds might be sufficient.