Mach4 can change the feedrate by changing all axes within the corordinated move.
I know that

... but add to that the capability to handle an external control
It can update the feedrate 40 times per second.
I blamed ESS for this frequency and I very hope, that its not mach4 that forces that slow communication.
Is that update rate not adequate?
Ask yourself! For me 40Hz is extremly slow.
So just take the time (1s / 40) and calculate how far your cnc might move at i.e. 12m/min (result: 5mm)
For me, that stepsize is too big.
I understand the PLC runs faster than that, about 12.5ms. You can program it to run faster although I believe there are practical
limits which suggest about 5ms.
I don't know, where you take such asumptions from. 5ms is damn slow.
Lets calculate the requirements for hobbylevel close loop with common steppers:
A 2-phase stepper takes 200 Steps for one turn and has an encoder with 1000 lines. The encoder has 2 channels and is decoded by graycode. Hobbylevel stepper drivers support a max. steprate of 200kHz
Lets calculate the encoder: 200 steps means 1000 encoderlines or 4000 graycode pulses, so 200kHz steprate means 4MHz signals coming from encoder.
AFAIK ESS is capable to sample encoders with 4MHz.
4MHz means 125 nanoseconds between two pulses (5ms is 40,000 times bigger than 125 nanoseconds).
Your PC runs at some thousand GHz/s and a current SATA interface is rated at 6GBit/s - so with a motion controller, that is attached to internal PC-bus, that timing is no big thing - and I'm quite sure, that it isn't for mach4 neither.
Reinhard