Todorov's goal won the title for Pompey
Svetoslav Todorov was the Portsmouth hero as the south coast club won the Division One title.
All the goals came in the first half as Pompey went a decisive four points clear of Leicester, who could only draw 1-1 with Norwich earlier on Sunday, with just one game left to play.
Todorov won the penalty that saw Paul Merson put Portsmouth in the lead after 10 minutes and then scored twice himself.
After Guy Branston had levelled for Rotherham at 1-1 Todorov put the hosts 2-1 ahead, only for Chris Swailes to equalise again after 28 minutes for Ronnie Moore's side.
However, Todorov scored from close range right on half-time to secure the points - and the title - for the home side.
Any nerves Portsmouth might have felt were swept away when Branston's crude push on Todorov earned the home side a penalty.
Merson showed no nerves as he steered the spot-kick into the top right-hand corner, but the visitors refused to lie down and Ronnie Moore's side were level within five minutes.
A long throw from the right by Shaun Barker was flicked on and Branston stole in to prod past a helpless Shaka Hislop from six yards.
That shook the home side but they were soon back in front.
Branston misjudged a through-ball down the right and Vincent Pericard raced on to cross for Todorov to sweep home from close range for his 22nd goal of the season.
Although Pompey were in the ascendancy, Rotherham continued to threaten and they earned their reward after 28 minutes after Alan Lee's shot was deflected for a corner.
Swailes rose highest at the back post to stun Pompey and head the Millers back level.
But Todorov then had the last word of the half as he bundled home from close range after Nigel Quashie's left-wing cross was headed back across goal by Pericard for the Bulgarian to score.
After the break Portsmouth did not have it all their own way but they went closest to scoring through Tim Sherwood and Nigerian Yacubu Ayegbini.
In the end they could not add to their tally but the home fans were far from unhappy and the chants of "we're gonna win the league" were echoing round the ground well before the final whistle.
Portsmouth: Hislop, Primus, Festa, Foxe, Stone, Sherwood,
Merson, Quashie, Harper, Todorov, Pericard. Subs: Kawaguchi,
De Zeeuw, O'Neil, Diabate, Ayegbini.
Rotherham: Gray, McIntosh, Swailes, Branston, Shaun Barker,
Daws, Richard Barker, Talbot, Sedgwick, Lee, Hurst. Subs:
Pollitt, Robins, Warne, Hudson, Monkhouse.
Referee: R Beeby (Northamptonshire)