I did not investigated multiplayer for that, however in singleplayer i think GameInstance is first.
You can also make game systems (in C++) and they load around same time as GameInstance (but i am not really sure if i loaded them manually from game instance, or they load self).
For my game i made simple solution:
- on begin play added usual get all actors, check if reference is valid, if it is store it in variable.
- then on event tick same stuff if its valid stop checking, and store valid reference. This way every reference to blueprints i needed was valid after some time. This beats that silly delay 0.2 sec.