My solution is to take contract work. It helps so much to know that there is a definite end date coming up where I can step away from the company and forget about all of the nonsense. Having time off between contracts helps me recover from the hard work and overtime. It also has a second benefit of allowing me to charge a higher rate, because sometimes companies value a person who is available to jump in at a moment's notice to help with a crisis.
Having a decade of short-term jobs listed on my resume might sound bad, but it's worked out very well for me, in compensation and in skills development. Rather than be negative about not lasting long at one company, why not be proud of the diversity of experience you have and at how comfortable you are with joining a brand new team?