My DSs are nearly the same age as yours, and I have never smacked either of them - I was (occasionally) smacked as a child and remember feeling angry and hard-done-by - also that my mother had lost control, which was true: it didn't make me regret my behaviour.
I understand what you say about what to do in the moment. If they do something I consider really bad (mainly hurting the other one) then I make them stand in the corner until they say sorry - in a Supernanny sort of way: very calm and if they run off etc., just replacing them in the corner and reminding them why they're there. I don't have to do it very often.
For other behaviour - snatching things from each other etc., I say: e.g. 'No snatching' and make them give the toy back. Then I say 'DS1 (or whichever) had it first, so he is going to play with it, and when he's finished he'll give it to DS2.' When the toy gets passed across, then I praise DS1 for that, and ask DS2 to say thank you.
After reading various childcare books (a good one called 'Sibling Rivalry' - can't remember who it's by, but useful), I try to do the old chestnut of praising good behaviour a lot (and looking out for it to praise), reminding them both of what good behaviour I want, and also keeping on looking out for opportunities for one of them to be kind to the other (passing something out of reach, giving them a hug when they're upset etc.) and suggesting they do that, and praising them when they do.
Hope this doesn't sound prissy. I am far from perfect, and it is all aspirational. But I really believe that smacking and shouting just model bad behaviour for them to follow, and that working on fostering good behaviour is better (and not getting too worked up about the inevitable infractions as long as the general direction is good).
Really agree with everything Cory and BertieBotts have said - it's about directing behaviour towards a better place, rather than just punishment and reward of whatever comes up.
Good luck! Two boys are fab.