The Norwegian teenager kept up his sensational scoring run since his January arrival with his double taking his tally to 13 goals in 10 German League start, while there was also a full debut for American teen Giovanni Reyna.
The victory guaranteed Dortmund would finish runners-up behind Bayern Munich for the fifth time in the last eight years as Leipzig, the only team that could catch them, needed at least a point to have a chance of finishing second.
Instead, Dortmund advanced to 69 points while Leipzig stayed in third place on 63 with just one more match to play next Saturday.
However, a berth in next season's Champions League is all but confirmed for Leipzig despite the defeat, after Bayer Leverkusen also lost on Saturday.
Haaland's 30th-minute opener was a club record 83rd league goal of the season for Dortmund and was arguably one of their best of the campaign.
It started with defender Mats Hummels dribbling past several opponents near the halfway line, setting up a run down the flank and pass inside from Julian Brandt. Reyna, 17, then laid off the ball for Haaland to finish.
Haaland, 19, added a second on the stroke of full-time but could easily have scored more were it not for the goalkeeping heroics of Leipzig's Peter Gulasci, who denied him three times at point-blank range.
Mateu Morey also missed when in front of goal early in the second half, after Haaland played him in but Gulasci did enough to put him off his final effort.
It was the final home game for Leipzig's Chelsea-bound striker Timo Werner, but he proved largely anonymous save for a 40th-minute effort from a tight angle that Dortmund keeper Roman Burki blocked, and he was replaced with 20 minutes left.
There was a late chance for the hosts to equalise but with six minutes left flying fullback Angelino saw his effort blocked by Buerki, leaving Haaland to have the final say.