Kovalchuk scored into an empty net with 1:01 remaining, completing a hat trick and pushing his goal total to 48 this season.
"I think anytime you have a three-goal lead and don't defend it, it will hurt you," said Flames coach Mike Keenan, whose club fell to 18-15-1 away from home.
"It's a tough one to take. Anytime you have a 1-0, 2-0 or 3-0 lead, that's a game you should win," said Jarome Iginla, who had two of Calgary's goals.
The Flames, who lost at Washington 3-2 on Wednesday night, will play at Chicago on Sunday and at Columbus on Tuesday before returning home.
Calgary entered the game in a virtual tie for first place in the Northwest Division, sixth overall in the Western Conference, but several teams were within points of the Flames in a bid for one of eight playoff berths with 11 games left.
"We have to put this one aside and work for the next game. We need to regroup," Iginla said. "We were in good shape, but we had some breakdowns."
The Thrashers, down 3-0 early in the second period, tied it at 4 on a goal by Chris Thorburn at 10:10 of the third.
Holik scored the winner with 3:47 left, his 12th, beating goalie Curtis Joseph. It was the Flames' second loss in a row and third in four games.
"What set it up was a great pass by Kovy. I had all the time in the world and I shot it as hard as I could, as quick as I could," Holik said.
"It was tough. We were down three goals but we came back and showed a lot of character," Kovalchuk said. "It was good [to get the hat trick] but most importantly to win."
Iginla's two goals gave him 44 for the season and four in three games. Daymond Langkow added a short-handed tally and two assists to lead Calgary.
Wayne Primeau added a goal for the Flames in the second period for a 4-2 lead.
Kovalchuk scored twice and Colby Armstrong also found the net during a three-goal second period that got the Thrashers within 4-3.
Langkow opened the scoring with his 27th goal when he stole the puck from Tobias Enstrom and easily beat goaltender Kari Lehtonen 13:57 into the first period.
Just over four minutes later, Iginla made it 2-0 with his 43rd, assisted by Langkow and Adrian Aucoin.
Calgary made it 3-0 when Iginla converted a rebound of Langkow's shot past Lehtonen 2:45 into the second period.
The Thrashers, however, scored a pair of goals within 19 seconds of the second period to cut their deficit to 3-2.
Kovalchuk scored his first by knocking in a rebound of a shot by Holik, who had two assists, at 4:29 of the second period. Armstrong netted his 12th, firing a shot past Joseph, who had just stopped a shot by Eric Perrin but was out of position for the rebound at 4:48.
Calgary made it 4-2 on Primeau's third goal, scored at 12:39 of the middle period.
Kovalchuk made it 4-3 with his 47th goal, a power-play drive with 2:24 left in the second period.
Joseph, an 18-year NHL veteran, made his fourth start since signing as a free agent on Jan. 16. ... Only 2:10 in, the Flames' Eric Godard and Atlanta's Eric Boulton fought for nearly a minute. ... Atlanta's Mark Recchi played in his 1,400th NHL game, fifth among active players, 26th overall. He had a pair of assists.
Copyright by STATS LLC and The Associated Press
Arena: Philips Arena Location: Atlanta, Georgia
Referees: Dennis LaRue, Dean Morton Linesmen: Brad Lazarowich, Jonny Murray
Attendance: 16,244 (87.6% full)
Team Stat Comparison
Power Play Goals
Power Play Opportunities
Shots on Goal
Daymond Langkow (27)
Jarome Iginla (43)
Assists: Adrian Aucoin, Daymond Langkow
Jarome Iginla (44)
Assists: Daymond Langkow, Kristian Huselius
Ilya Kovalchuk (46)
Assists: Bobby Holik, Chris Thorburn
Colby Armstrong (12)
Assists: Eric Perrin, Ken Klee
Wayne Primeau (3)
Assists: Matthew Lombardi, Stephane Yelle
Ilya Kovalchuk (47)
(Power Play) Assists: Mark Recchi, Erik Christensen
Chris Thorburn (4)
Bobby Holik (12)
Assists: Ilya Kovalchuk, Steve McCarthy
Ilya Kovalchuk (48)
(Empty Net) Assists: Mark Recchi, Bobby Holik