If I prevent transaction creation via ACL, the transaction doesn't fail until after it executes.
The transaction script runs, but the failure happens at the very end when the transaction fails to be created due to ACL.
Is there a way to prevent the execution from ever starting ?
To be clear, the transaction is not committed, so the effect is the same. What you are describing is a (useful) optimization, rather than a change in behavior.