Have you tried writing any code in the appropriate M functions?
I can imagine that perhaps you are using more M codes than you really need to. You can use the Z component of one of your work offsets to get the head down if it is actually servo controlled, or if it is a simpler solenoid type thing, the head down, torch on, dwell, I/O can all be conducted within one M code's logic.
If you have need of discrete Mcodes for each torch function (to run in MDI), you could maybe create some new ones of your own.
First you get good, then you get fast. Then grouchiness sets in.
(Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management)