Hang on in there Sammysoo, just five years to go, three at a push.
Seriously, keep it in mind this won't last forever.
You sound very wound up and full of anxiety and self-reproach. But you know you have tried your best. If you were a crap parent you wouldn't be on here trying to find a way to improve things. So first, stop with the guilt and self-recriminations. You are doing your best.
I think you need to sit down with your dh and get some bottom line, non-negotiable boundaries agreed, eg everyone's physical safety. These are things that surely your dh can back you up on and commit to? Agree what they are and how you will handle their transgression, eg if ds physically attacks you, you call the police.
I also think you should be looking for ways to give yourself and your dd regular breaks from your ds's behaviour.
Perhaps you need to shift your expectations? These next few years might be more about survival and damage limitation. So you forget all the stuff that is nice but not necessary eg help with housework, chatting nicely with you. Just aim at the basics, eg safety, and anything else is a bonus, but not something you will get into a conflict with ds about.
Never (as much as humanly possible) rise to the wind-ups. It takes two to have a row. If you steadily (think broken record) stick to what is right, eg, don't swear at me, your kit is your responsibility, and state it calmly - then walk away - then you can't get in to an argument. Be ready for him. Take deep breaths. Think of your job as parent as just to stay calm with him and ensure safety. That's all.
I also think you should try to look for the positives as much as you can (v hard I know when you feel like you could happily never see them again). You say he's good at school? Could you tell him in a calm casual way that you are proud of his achievements at school. Or that he's handsome, or got lovely eyes or something like that? Also, talk about what he was like as a little boy - how kind and thoughtful he could be. Help him see himself as a better person? Try to get your relationship on a slightly more positive track by just throwing in small but regular compliments/positives?
One other thing that occurred to me from your post was that you are coping with a lot of challenges and changes - and your ds is therefore too. Not to excuse his abusive behaviour, but you might get some insight if you look out for these changes being a trigger to his tantrums and throwing his weight around.
Also, I'd stop seeing your friend or at least talking to her about your ds. If you can't get support, at least you don't need to be around smugness her dc will probably go off the rails later