I have been told that having a chart with stars for good and bad behaviour might help. DS is only 2, so it wont work with him yet, but during a disciplining course a few weeks ago, I got this advice and it sort of makes sense.
You starts the day with 5 stars. Every time he acts badly, you take 1 star off. Every time he does something good, you add a star. You then make a certain minimum limit with matching rewards. You count the stars together before bed and you discuss why he has earned or lost those stars....
Ie: If he has between 5 and 8 stars, he gets to choose a fun (free or cheap) activity to do with you the next day (or something like that).
If he has between 8 and 10 stars, he gets an extra desert the next day (or something like that).
If he has less than 5 stars, he has a privilege taken away from him (No TV or computer the next day, or something like that).
Yet Im also leaning towards seeing a GP and getting him to talk to a child psychologist. They might be able to tell you why he is acting the way he is and what kind of things you can do to try and turn his bad behaviour around.