Blake Coleman, Matthew Tkachuk and Johnny Gaudreau scored for the Flames (17-10-6), who finished a five-game road trip with their third straight loss. Dan Vladar made 31 saves, one night after making 29 saves in a 4-1 loss to the Tampa Bay Lightning.
Coleman took advantage of a Jordan Staal turnover and scored on a short-side wrist shot for a 1-0 lead at 5:12 of the first period. The Flames outshot the Hurricanes 21-10 in the first period.
"It was the best period of the 15 on the trip," Calgary coach Darryl Sutter said. "It's the start we wanted, the emotion we wanted to see and the detail in how we want to play."
Fast tipped Brett Pesce's shot from the point for his eighth goal of the season, tying it 1-1 at 17:15.
"Especially during that time, we needed a goal to get some confidence going back and move our legs a little bit more," Fast said. "We were standing still a lot, and [there were] a lot of turnovers in the first period."
Derek Stepan put the Hurricanes ahead 2-1 at 7:40 of the second period. Steven Lorentz held off Adam Ruzicka in the right face-off circle before feeding a backhand to Stepan in the slot.
Svechnikov kept the puck on a 2-on-1 with Vincent Trocheck and scored from the slot to push the lead to 3-1 at 9:22.
Tony DeAngelo scored into an open net for a 4-1 lead at 12:35 after Sebastian Aho batted the puck off the crossbar.
"You've got to be in the rhythm, and it took us a while," Hurricanes coach Rod Brind'Amour said. "'Freddie' kept us in the game in the first period. In the second period, we had our legs and we took it to them the whole period. That was the difference in the game to me."
Tkachuk scored his 15th goal of the season when he held the puck on a 2-on-1 and scored through the five-hole to cut Carolina's lead to 4-2 at 13:26.
Gaudreau took a stretch pass from Erik Gudbranson and scored top shelf to cut the lead to 4-3 at 8:57 of the third period.
"It's a one-goal game, we had a little momentum," Gaudreau said. "We were right there, then we let the game get away from us."