The problem with doing this in Mach 3, is how do you track the tools, and how do you store the information when things get shut down.
Easiest option I think would be to use a PLC with battery backed memory that keeps track of the tools and slots, and Mach simply requests the required tool from the PLC.
If you were to use something Cam/Geneva driven where you only need to trigger the positioning to move one position, you could use a Macro pump to stage the next tool by using a custom M code, however you'd then be reliant on Mach to handle the tool/slots, which I can't think of any easy way to do. I know Mach can write to output files, but I'm not sure if it can read them?
Mach 4 should be able to handle this. I know there was a discussion about Mach 4 and pre-staging tools, where you can have a script run when a T********* block is read, but the change doesn't physically happen until an M6 is requested. However I've not played with Mach4 for a while, so not sure if it has slot functionality available for the tool table.
I know with my lathe running KMotionCNC, the tool table has columns for Slot and Tool IDs. When I request a tool number, the Slot ID for that tool number is sent to the KFlop for carrying out the tool change. There is also the functionality to change the tool properties from the KFlop, so a random tool changer is possible, but I've never seen anybody implement one yet.