The Bobcats broke open the back-and-forth game in the final two minutes, and won despite being outrebounded 57-32 by the Blazers.
"We got out rebounded and we still won so that shows a lot for our team," said Raymond Felton, who added 18 points.
Jarrett Jack's running jumper put Portland ahead 83-79 with 4:28 left, but Richardson answered with a basket for Charlotte to keep it close.
Okafor's hook shot tied it at 83, then the Bobcats went ahead on Felton's 3-pointer with 1:59 to go.
Outlaw made a pair of free throws for the Blazers, but Felton and Richardson each made layups to push Charlotte's lead to 90-85. Felton added a long jumper with 42.9 seconds left to seal it for the Bobcats.
"It feels really good -- especially how we did it," Charlotte coach Sam Vincent said. "We played extremely tough against a team that played extremely tough."
Portland, all but eliminated from the playoffs, was still fighting for its first winning record since the 2002-2003. The Blazers need four victories in their final eight games.
The Blazers were playing their second straight without All-Star guard Brandon Roy, who injured his groin Tuesday night early in a 102-82 victory over Washington. Roy was expected to miss at least two more games.
Coach Nate McMillan was stern with his team after the game.
"What I told them was if they were just playing out the year it would be a waste of the good season we've had so far," he said. "They played tonight like they want to the season to end. That's not the type of attitude that we should be having."
Center Joel Przybilla said the Blazers haven't given up.
"I don't believe it. I'm out there playing hard and all of my teammates are playing hard," he said. "I've been around team that have hung it up, and this team definitely is not doing that."
The Bobcats wrapped up their four-game road trip at 3-1. They were coming off a 96-93 victory over the SuperSonics in Seattle on Friday night.
The Blazers were coming off a 111-95 loss at Golden State on Thursday night. The Warriors outscored Portland 40-20 in the fourth quarter alone.
Charlotte, also all but out of the playoffs, trailed by as many as eight points in the first quarter, but pulled to within 30-29 on Earl Boykins' layup early in the second.
The Bobcats kept it close until Richardson's layup tied it at 41 with 3:53 left before the break. Outlaw pulled Portland back out front with a 3-pointer, but Richardson answered for the Bobcats with his own 3.
Gerald Wallace finally put Charlotte in front at 47-46 with a 3-pointer with 34.9 seconds to go in the half, and the Bobcats led 49-48 at the break.
Wallace left the game in the third quarter after colliding with Okafor. He returned with about three minutes to go.
Portland regained the lead when Outlaw's 3-pointer made it 53-52 early in the second half. But it was back-and-forth with nine lead changes in the third quarter.
Przybilla had eight points and 18 rebounds for Portland.
"They are long and big and it's hard to box them out because they would tip it out and their guards would come in and rebound," Richardson said. "We didn't give up on the game and we kept fighting and got the key rebounds that we needed."
- Charlotte's Derek Anderson, who played for the Blazers from 2001-05, missed a third straight game because of personal reasons.
- Okafor played in his 84th consecutive game for the Bobcats, breaking the record of 83 set by Melvin Ely from November 2004 to November 2005.