Columbus scored three goals in the third period and four unanswered. Emil Bemstrom gave Columbus a 3-2 lead at 6:54, and Boone Jenner made it 4-2 on the power play at 11:06. Dubois scored his second of the game to make it 5-2 at 14:33.
Eric Robinson scored, Oliver Bjorkstrand had two assists, and Joonas Korpisalo made 30 saves for the Blue Jackets (8-8-4), who are 3-1-1 in their past five games.
"We're certainly not used to playing with a three-goal lead with three or four minutes left," Blue Jackets coach John Tortorella said of their first win by more than one goal this season.
WATCH: [All Canadiens vs. Blue Jackets highlights]
Artturi Lehkonen and Joel Armia scored, and Carey Price made 21 saves for the Canadiens (11-6-4), who led 2-1 early in the second period and had a six-game point streak (4-0-2) end.
"We didn't bear down," Montreal forward Brendan Gallagher said. "We had plenty of chances there, especially in the first two periods. We had the opportunity in the third to take the lead, extend the lead."
Bemstrom scored on an unusual play to break the tie. His high shot from the slot rebounded off the glass toward the net. Price had turned to look for the puck, and it hit him and deflected into the goal.
"I didn't know if it was a good goal," Bemstrom said. "I don't know what I was thinking. The puck just bounced back and went in."
Tortorella said, "I've never seen it go in with the goalie looking in the stands that way. I don't care. That's some puck luck for us."