I definitely agree that karate can help with this. My son is also very non-aggressive. He is a fence-mender and a truly soft hearted young man. Always has been.
He became a 1st Degree Black Belt in Tang Soo Do at age 11. They spar in class regularly and he has to punch/kick his sparring partner, as well as receive punches/kicks (or block them). They wear full sparring gear for protection. He is one of the least aggressive students in the class to this day. He just isn't interested in getting in there and hitting/kicking another person. He moves around and avoids as much as he can.
HOWEVER, in the "real" world, it makes a HUGE difference. In class, he is sparring with other black belts, and they are often very aggressive. Some kids just are. In the real world, he isn't aggressive (nor do I want him to be), but he is not afraid of someone acting threatening to him... he's BEEN hit/kicked! It loses a lot of it's intimidation when you are accustomed to it (even with protective gear on) from Black Belts that are bigger than you. And at my son's age, a lot of the black belts ARE bigger than he is.
They teach how to avoid altercations, and how to end them. The goal is to not be fighting. :) They also teach groundfighting: wrestling (most real fights end up on the ground).
My son started when he was 5 1/2 yrs old. When he was in 1st grade, a classmate shoved him in line at an outside field day, and my son just responded. He kicked the kid. (It was a good side kick too, lol). He wasn't being mean.. it was just a natural reaction from having practiced over and over in class 2x a week... when your sparring partner kicks/shoves you, you kick them away. He didn't even think, he just DID. Now that he is older, of course, he thinks first. That was our first clue that he really WAS "getting" something out of class, because he seems so passive in class. But even as non-agressive as he is, it is amazing how confident and quickly he CAN respond. He is a 7th grader now. Just 2 weeks ago, I noticed a scratch on his arm. I asked him about it. Come to find out a bigger kid (probably has 30 lbs on my son) started arguing with my son and another friend. My son ignored him. Then, he says, the other boy tried to grab his arm, my son blocked him and shoved him back. (His finger nail scratched my son's arm in this process). The other boy then left/walked away. I talked to my son about it, tried to see if it was something likely to become a daily issue, since it happened in front of the school while tons of kids were milling around waiting for their car ride. Plenty of teachers around, but none of them apparently saw anything or probably cared. They are all distracted talking with each other and directing car traffic. The next day, when I picked up my son, I asked him about the boy. He said he talked to him, and they are now friends. :) Sounds like the kid was trying to test him and see if he would fight or be scared of him.
I know 5 is a big transitional age for your son, and for YOU. I always told my son, and still do, that the best fight is one you don't have, but if someone hits you, you are allowed to hit back and defend yourself. Don't throw the first punch, but don't just "take it" either. Let me tell you, when your now 5 yr old finally hits 6th grade, you will be petrified to leave him at school! There is a HUGE difference in the size/physical maturity of the incoming 6th graders and the 8th graders that they are in the same school with in middle school. Seriously. Some of the 8th graders look like they belong in high school! And when your 5 yr old is 11, he will still seem like a delicate little 5 yr old to you, lol.
Sorry to be so long... but karate is a WONDERFUL thing for you son to become involved with. It will help him now, AND later. :)