In front of the highest league attendance of the season at Brisbane Road, 5,126, the O’s opened the scoring on 26 minutes after David Mooney was rewarded for his persistence.
Chasing a long ball out of defence from former Bournemouth player Mathieu Baudry, Mooney pulled it across the face of the goal to an unmarked MacDonald who slotted home from six yards.
The visitors’ most serious first-half threat came when a header from Dan Seabourne struck the crossbar and was scrambled away.
But the Cherries were caught cold three minutes after the interval when MacDonald collected another Baudry pass and showed fine composure before slipping the ball past Shwan Jalal.
Substitute Brett Pitman brought Bournemouth back into contention after 66 minutes when Eunan O’Kane crossed from the right and the unmarked striker drilled a left-footed volley into the bottom-right corner.
However Kevin Lisbie, back as a sub after a spell out injured, received a pass from Moses Odubajo and found the target from 12 yards on 79 minutes to wrap up the points.