Wow that’s a lot of state machines!
Any logic you have in any state or transition graph is going to be evaluated through the Blueprint VM on the main thread. Most VM overhead would come from evaluating transitions each tick which is the default behavior. It’s possible to bind to events in the transition graph and disable evaluation until the event is triggered. Transitions · Recursoft/LogicDriver-Example Wiki · GitHub has an example. The SetCanEvaluate call physically prevents the Blueprint graph from being evaluated.
You can also change the update rate of the state machine and Blueprint nativization is supported as well (as long as the blueprint logic you use also supports it).
Hope this helps! Let me know if you have any other questions.