Horror stories like this are the main reason I only ever bill by the hour and invoice biweekly. Like, sure, I'll change things to meet requirements but I'm not going to work for free or go without pay for months. It's also much easier to fire bad clients or to stop working when an invoice goes unpaid for too long. The only downside to this approach is when salaried subordinates don't understand this dynamic and rack…
I agree with you, this project structure sounds… much worse than T&M billing, but if I were going to take on a contract in this structure I would have a simple rule of “I won’t work on the next milestone, without getting approval on the prior one” (for something like this, where the milestones are pretty small, maybe I’d be willing to work one milestone ahead).
But I’d absolutely use the schedule pressure as a tool to get them to care about approvals. Because, from the described contract structure, what incentive does the client have to give timely approvals or rejections? None!