I first did it as you do, but it became such a clutch, especially as I added that juice, particles, sound effects, screen shakes and whatnot. I unentangled this recently, and wrote about it
here, also see posts above for yet more info.
I learned some more since then, for example from
here. I now also do the jump arc entirely with a blend tree, as described there.
Summary: For example Jump: the player does jump (fsm with the mechanics), I send a global event to the player game object, including children. This way, all FSMs that would need to know about it (by listening to that global event) know that we're now jumping. An effects FSM with meaningful states sits somewhere downwards in the hierarchy and listens for that jump event. It then plays one single jump state where the clutch of stuff is placed, the sound effects, particles and so on. In there, I set animator state mostly directly, with
Animator Cross Fade, and else use blend trees as much as possible (e.g. from idle to running is done with blend trees, not with any states).