In one of my big Blitz Basic projects I still work on I changed all functions/procedures to...
JSR + RTS combination.
I also use only global variables so before calling a subroutine by JSR I setup parameters like:
a=123; b=456; x=0; JSR subroutine
to be honest I can't measure how much faster it is than GOSUB but it gives me feeling that I do control the situation.
I also try to use assembly code where possible.