My problem is that when the switch is pressed the Arduino leisurely finishes whatever ISR it is currently running before switching to the new one.
Leisurely? locationChange looks like about 200 machine instructions. Which is about 200/16000000*1000000 = 12 milliseconds. Are you honestly going to try to convince us that you have a stepper motor + cart that responds to a signal change within 12 milliseconds?
Instead I would like it to quit the current routine immediately and begin the other routine.
That is a very very very bad idea. Did I mention that's a bad idea?
Switches. Motors. Carts. From a 16 MHz processor's perspective, all slow things. There is nothing in your description or your code to indicate interrupts are necessary. Why are you using them?