Try to move Level blueprint (step 3) logic to the Player Pawn.
This means that you have to “set the variables with references to the level objects” in the pawn which might further delay the pawn spawning but it should work. (the main performance hit is on the “getting” of the actors)
I just need to access level actors from the Player Pawn.
Now if the actor list and the UI is not dependent on the spawned Pawn you might use another object’s begin play to do this. The widget creation needs a valid player controller regardless of weather it has a pawn or not so you can move the variables in there. (I think it is begin play is done after the level so you should have access to the actors - If not you can always use onPosses)