What I would do:
Not use indexes
I think the indirection of indexes are not helping any. This is actually orthogonal to the “how to wire this up” question, though.
When spawning an objective, make every objective derive from a generic objective marker class. The generic objective marker has two properties; “Stage” and “Objective” of type Stage-object, and Objective-object. These are marked “expose on Spawn” in the blueprint editor.
The Quest has an array of Stages, each Stage has an array of Objectives.
When spawning an objective marker using the Spawn Actor From Class function in Blueprint, once you know that the class will be a subclass of GenericObjectiveActor, the node will add the values that are “expose on Spawn,” so you can plug in your Stage and Objective values right into the spawn call.