Opener Tamim reached 11,000 international runs with his 40th one-day fifty while Shakib got to the 10,000-run milestone in the run feast as the hosts at one stage threatened 340 on the board.
Mushfiqur then blasted 62 runs off 52 balls.
The Lankans, with regular limited-overs captain Angelo Mathews sidelined with injuries, were all out for 157 in the 33rd over.
Shakib became the Man of the Match as he also took three wickets for 47 while skipper Mashrafe bin Mortaza and paceman Rubel Hossain got two wickets each. Nasir Hossain and Mustafizur Rahman chipped in with one wicket apiece.
After winning their two matches with bonus points, the Tigers have now reached the final of the series.
The hype for the match against Sri Lanka was at its peak, as it was the first encounter between coach Chandika Hathurusingha’s former and current teams.
Senior Bangladesh cricketers, however, ruled out the possibilities of the Lankans getting any advantage from Hathurusingha’s experiences with Bangladesh, and the Tigers have now proven it in the game.
Before the 163-run record win over Hathurusingha’s Sri Lanka, Bangladesh’s previous record was a 160-run victory over West Indies in 2012.
Tamim’s opening partner Anamul Haque, who rode on three reprieves to 35 off 37 balls, also equalled Shahriar Nafis’ record of 1,000 runs in lowest number of matches – 29 – for any Bangladesh batsman.
After Anamul’s departure in the 15th over, Shakib proved the critics who had questioned his batting one-down wrong with a strong 99-run partnership with Tamim.
The hosts brought up the hundred in the 19th over followed by Tamim’s ODI fifty which came two overs later. Tamim then went for power-hitting with two sixes off successive deliveries and smashed boundaries in successive overs.
Shakib, who was going more than a-run-a-ball, also upped the tempo.
Tamim was looking good for a hundred until he got out on review. But Bangladesh kept stringing together 50-plus partnerships.
Mushfiqur and Shakib did not allow the run-rate to drop as they began to rebuild and the left-hander got to his 35th fifty in the 57-run third-wicket stand.
At least one set batsman at the crease all the time meant there was no respite for the Lankan bowlers.
And, when Shakib was back in the hutch, Mushfiqur kept the scoreboard ticking towards 300 with a 42-ball half-century, his 28th.
Bangladesh lost Mushfiqur and Mahmudullah in back-to-back overs to slow down and Sri Lanka put the brakes on the scoring with three quick wickets in the last five overs.
But Sabbir Rahman’s 24-run cameo helped Bangladesh set the islanders 321 to chase.
Sri Lanka needed a good start to the big chase and much depended on opener Kusal Perera, but skipper Mashrafe once again came up with a surprise. Nasir Hossain opened the bowling and took Kusal out with his off-spin.
Mashrafe, in his eight-over opening spell, put pressure on the Lankan batsmen by taking two important wickets of Upul Tharanga and Kusal Mendis and the chase fizzled out.
Sri Lanka failed to absorb the pressure and lost wickets regularly.
Mustafizur bowled Niroshan Dickwella while Dinesh Chandimal, the skipper for the match, was run out.
Thisara Perera was the top scorer of Sri Lanka with 29 runs.
Shakib also missed a hat-trick in the match after taking the wickets of Asela Gunaratne and Wanindu Hasaranga in back-to-back balls.