20ms (0.02s) is quite a long time for a computer, it can do a heck of a lot in that time.
Does the code already exist as a function, and does the code already fail to meet the target time?
You haven't answered my question about profiling. How long does the code take to run at present?
Why do you think creating a stack takes a long time? It's just a case of adding a constant to the stack pointer, and CALL/RETURN statements don't take up much time at all. If you're concerned about parameter passing, pass them in as a pointer to a structure instead although copying a few parameters is just a question of a few microseconds. To be honest the algorithms your code uses are far more likely to be the cause of any performance issues, not the function calling protocol.