My kids are very close in age to yours, and we've been right there with you, though now it's much, much better. The worst we get is a little push here and there, and lots of screaming, but he thinks that's pretty funny, so I don't care.
I think you're right on with the prevention thing. When the hitting was bad, I just didn't let them get very close to each other. I was more than an eagle eye, it was like I was preventing the spread of contagious disease. It was a pain in the butt, but it did seem to break the cycle. Other things we did for prevention, but I'm not sure what worked:
-After the baby went down for his nap, I got down on the floor for 20-30 minutes of very intense play w/dd.
-Enlisted dd's help w/ds, handing him a toy, finding the bib, helping change him, wash his hands in the tub, etc.
-Taught dd lots of games to play with ds, I think this encouraged positive feelings between them.
And when she did hit, my reaction was like yours. First we tried time out, maybe five times. That was a failure. A few times I lost my temper, a few times I roughly hauled her in and sat her on her bed. That all sucked, of course, and I think what worked the best was this. I get right down next to her and put my hand on her shoulder and say, in my most serious, firmest, quietest voice, "I can see that you are frustrated with your brother, but you may not hit your brother. It is not acceptable to hit him, it hurts him."
Then I attend to him. Then when everyone's calmed down, we troubleshoot the incident and find a solution. Which is usually, "We'll have to keep your toys up where he can't reach them."