I was in a similar situation and in my case I also had the fourth option:
4. Try not to touch any old projects. Instead try to "own" a new one where you can do things the right way.
There are, however, a few problems with this approach: your will probably be implementing the whole thing alone and will quickly become unpopular with the others.
In my case I ended up implementing a compiler frontend alone from scratch while everybody else were thinking it was a waste of time and we should have based our work on the old code (which, agreed by everybody, was hell of a mess). When time came to implement the backend, I had to bring one of the "old-timers" on board which caused a lot of tension (he preferred to do things the "old way", for example, to indent the generated C++ code manually instead of using the automatic indenter that I wrote).
One other thing that I tried with mixed results was to "recruit" new hires with some sense of design to work with me on the project before they got exposed to the "dark side".
In the end I left that place not the least because of the "us vs you" attitude which was, on the most part, the result of my own actions. I couldn't stand the attitude most people working there had towards software design (most of them were grad students so they weren't there for the long haul). I am now running my own development tools company and find it a much better way to spend my time.
In the end I suggest that anyone stuck in a situation like this get out of it as soon as possible. The extra effort required to make it work is just a waste of your life.