Create subscript text
method 1

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. 

import bpy

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

method 2

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[0] component of the regular script text Object. 

You'll have to enable Auto Run Python Scripts from UserPreferences > File



You tweak the superscript size an 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.




wikipedia article about superscript and subscript subtleties in typesetting
The unicode chart at unicode.org