You don't have to make him a saint or fall for the girl, but there should be a Character Arc. All characters must be changed by events that happen in your story and become a different person for them, even if it is very subtle. Having a completely static character means he is automatically not realistic. He needs to react.
To make good traits that keeps him anti-social and scornful, I would suggest evil-neutral actions. He may come across selfish but he can still do things that suit him, when it suits him. For example, one of my bully characters helps someone up, and then snaps at the person, "Get up, you're in my way." Because it helps him, he helps someone else. Good actions for selfish reasons cover the grounds of being grumpy but kind.