This might sound stupid - but why not do it manually.
I often have this problem, with homing and a great variety of other things, where GCode must, of necessity, go slow. I tend to jog everything I can jog to within striking distance and then do what it is I want to do.
I understand what you mean - i.e. to write a macro that can do everything - that is one thing, but to write a macro that can be as quick as your brain is another.
Why not get to a certain point in your macro - include an M1 command - this will allow you to jog whatever you want to where you want, and then click "cycle start"