I have a 3yo and an almost 5yo, so similar age gap, but a bit further along than you. They play together fairly well. I'd say when they are playing together 70% of the time it's fine and they cooperate, play together, share etc. The rest of the time I'm either telling the older one not to boss the younger one about so much, and to let her play how she wants to, or telling the younger one to share, negotiating toys being swiped, games being knocked over etc. God forbid the dog gets involved too, then it's really chaos.
I try to let them work out their disagreements themselves if possible. I think it's important to learn to share, negotiate, work together etc. But they are still very young so I do intervene if it all goes awry.
I have some red lines though. I am working on the older one not absolutely howling and yelling at the younger one when she grabs one of his carefully set up games. Instead I'm trying to get him to address it firmly, 'please put the toy back' or getting him to come and tell a grown up. At the moment he frequently launches into an air raid siren of yelling and wailing, and it drives me nuts.
Hitting and throwing are absolute no no issues. I don't care who started it. If either of them hits, whether they whack me or daddy or each other, they get a time out, followed by an short conversation about why they have been put in time out and what alternative actions would have been better. If a toy gets launched across the room, it gets removed for a period of time with an explanation of why. Neither of these behaviours are solutions we find acceptable, whatever the problem was, so they have firm and immediate consequences. Its rare they do either of these things now, but it's taken some time of being firm and consistent with that consequence.
If there is no consequence for the hitting, and it actually gets your 3yo what he wants, which is the smaller child being removed from the vicinity, then he will keep doing it. It's a successful strategy for him at the moment so why would he stop?