In BGE or UPBGE 0.2x, there isn't really a BGE equivalent of that BPY function.
UPBGE 0.3x on the other hand, allows BPY to fully works at runtime, allowing you to use font.move_select() in real-time.
You can only assign different materials to individual text characters if you use either the [BGE] BLF module (dynamic) or the you convert your text object to a [static] mesh, but the latter disables dynamic changing of its text.
I managed to get a working version during game engine runtime, on UPBGE 0.3 using only BPY.
Thanks to @Rpaladin for the helpful information to start with.
Here's the code:
context = bpy.context
#testtext is a text object with that name. Text cursor should be at the begining of the text before you run this code (in edit mode)
context.view_layer.objects.active = context.scene.objects.get("testtext")
#enter edit mode
#The text object has 2 materials, material 0 (first one) is set by default to all text
context.object.active_material_index = 1
#go back to object mode