The giant all-rounder, bowling just back of a length and hitting speeds of more than 91mph, took the big wickets of Kumar Sangakkara (36), Mahela Jayawardene (0) and Sanath Jayasuriya (4) as Sri Lanka were dismissed for 231.
England, 1-0 up in the series, then lost both openers cheaply to close on 53 for two.
Flintoff's muscular intervention sparked a top-order batting collapse just before lunch, three wickets falling for two runs in three overs. From 84 for one, Sri Lanka slumped to 139 for eight.
Sri Lanka's had the consolation of watching their last three batsmen slog 92 runs, underlining how badly things had gone before.
Having failed to reach 200 in their first innings at Lord's and 150 at Edgbaston, the touring side were looking for a big statement after winning the toss.
Instead, their openers were parted cheaply yet again, Michael Vandort playing on with two on the board.
That gave lively medium pacer Jon Lewis a wicket with the fourth ball of his debut. Lewis finished with three for 68, compared to Flintoff's three for 52.
The key to the day was the fall of Sangakkara after an 82-run stand for the second wicket with Upul Tharanga (34).
By then Flintoff was working up a real sweat as he thundered in from the Pavilion End.
Sangakkara, pinned back in his crease, fenced once too often and was given out caught behind. TV replays suggested he had been unlucky, just as they had suggested he might have been given out in similar fashion off his very first ball.
While Lewis, Matthew Hoggard and Liam Plunkett nagged away just outside off stump, Flintoff proved a completely different proposition. Jayawardene, Sri Lanka's captain did not enjoy the challenge and edged behind.
Jayasuriya soon followed. At least he got forward but he was undone by the bounce, the ball flying off the shoulder of his bat to gully.
Sri Lanka had gambled on coaxing the 36-year-old Jayasuriya out of a short-lived retirement in an attempt to shore up their first innings batting.
The salvage work was left instead to Chaminda Vaas, who top-scored with 38 not out batting at nine, and Muttiah Muralitharan, who made 33 off 29 balls at number 11.
Muralitharan, smiling throughout another highly entertaining display of farmyard threshing, hit the only six of the innings. Vaas's more conventional effort gave him a series average of 75, by far the best in the side.
If Flintoff was frustrated by the antics of his former Lancastrian team mate, he would also have been irritated by Marcus Trescothick's late dismissal.
The left-handed opener had seen Andrew Strauss (7) bowled by a Vaas off-cutter before he dithered over a risky second run and was given out by the television umpire despite a desperate dive for the crease.