MacDonald played for the Millwall youth team before joining Charlton Athletic as a trainee, turning professional in August 1998. He made his Charlton debut on 3 January 2000, as a late substitute for Martin Pringle in a 3â€“0 win at home to Nottingham Forest. He started the FA Cup tie against Queens Park Rangers the following weekend, scoring the only goal as Charlton progressed to the fourth round. He made two further appearances as substitute that season and won the Charlton Young Player of the Year Award.
He joined Cheltenham Town on loan in March 2001, scoring twice in seven games with both goals coming in the same game against Blackpool. He returned to the Charlton first team squad later that year and scored his first ever Premiership goal when scoring the late equaliser in the 1â€“1 draw with Newcastle United at The Valley. However, that was his last involvement with the Charlton first team and in February 2002 he joined Torquay United on loan, playing five games without scoring. In March 2002 he joined Colchester United on loan, but made just four appearances and scored one goal, in a 2â€“2 draw with Wigan Athletic, before returning to his parent club at The Valley.
He was released by Charlton in May 2002 and joined Conference side Margate in August. After one goal against Forest Green Rovers, the following month he moved to Conference rivals Stevenage Borough.
In August 2003 he moved to Crawley Town, and after an injury-troubled start, went on to play a crucial role in the club winning the Dr Martens League Premier Division and with it, promotion to the Nationwide Conference for the first time in its history. His best spell saw him score nine goals in seven matches â€“ scoring in all seven. He was the sideâ€™s leading scorer in the league, with 17 goals.
He had the honour of scoring Crawleyâ€™s first ever goal in the Conference, part of a brace that saw them beat Leigh RMI away from home 2â€“1. He scored seven goals in the first two months, but eventually lost his place and was loaned out to Weymouth in April 2005.
In May 2005 he moved to Gravesend & Northfleet and soon settled in as a regular in the Gravesend team and a regular on the score sheet. His contract with Gravesend and Northfleet ended at the close of the 2006â€“07 season and put pen-to-paper on a two-year deal with Southend United, arriving at Roots Hall on a free transfer. During his time at Southend he scored just once in the league against Doncaster Rovers, but he scored a further four goals in cup competitions with a goal against Watford in the League Cup, a brace against Oxford United in the FA Cup and another goal in the FA Cup against Dagenham & Redbridge.
He joined Brentford on 9 July 2008 for an undisclosed fee on a two-year contract. He scored 18 goals in his first season at the club, helping Brentford to win League Two. He was awarded the Powerade League Two Player of the Month award for February 2009. His first season was ended in March due to a shoulder injury; however, he bounced back to become Brentfordâ€™s top scorer in the 2009â€“10 season.
On 26 August 2011, Charlie MacDonald signed a two-year contract with MK Dons for an undisclosed fee. In his three-year stay at Brentford he scored a goal every 2.7 games; 40 goals in 111 games at Griffin Park. MacDonald was the replacement for Sam Baldock, who recently left MK Dons to join West Ham United.
MacDonald signed for Leyton Orient on a free transfer on 12 January 2013.
MacDonald joined Barnet on 16 July 2014 and scored a penalty on his debut, a 5â€“0 away win at Chester. He was appointed captain of the side by manager Martin Allen. After scoring eight goals during Barnetâ€™s promotion winning campaign, MacDonald was not offered a new contract with the Bees and joined newly promoted Boreham Wood in the summer of 2015.
In January 2016, MacDonald joined the Saints on loan.