Hairston played for Louisville Cardinals men's soccer for his freshman and sophomore years. He played in 39 games, and started 38. He was named to the All-Big East Rookie team in 2012, his rookie year. His sophomore year, he was named to the First Team All-Big East team.
After his sophomore year with Louisville Hairston signed a Generation Adidas contract and was selected 12th overall in the 2014 MLS SuperDraft by the Colorado Rapids. Hairston made his professional debut on March 29, 2014 against Sporting Kansas City. He scored his first professional goal on August 20, 2014 against LA Galaxy. On April 2, 2015, Hairston was loaned to USL side Charlotte Independence. May 12, 2015, Hairston earned USL Player of the Week after scoring a goal and picking up an assist in a 3-0 win over the Richmond Kickers. Towards the end of the 2015 season, Hairston was called up to the Rapids and started the last three games of the year, all at right back, a change from 2014, when he played in the midfield. In 2016 Hairston was permanently moved up to the Rapids from the Charlotte Independence, but only played in two of the first eleven games for the team. However, on July 16 he came on as a substitute against Sporting Kansas City and scored the game-winning goal, the Rapids taking the game 1-0. In his next 4 games he scored 2 and got 2 assists. He was rewarded for his strong performances by being named to the MLS Team of the Week for Week 22. Hairston helped the Rapids qualify for the 2016 MLS Cup Playoffs. Hairston made 4 appearances as the Rapids reached the Conference Finals before losing to the Seattle Sounders, the eventual champions. During 2017, Hairston played the majority of the season at right back, but still managed to tie his career high for goals with 3 while also adding 4 assists. Hairston was also the only Rapid to play in every league game in 2017. However, the Rapids struggled on the pitch and missed the playoffs, head coach Pablo Mastroeni was fired as a result. Hairston was regarded for his strong performances by being called up to his first senior US National Team camp. On February 20, 2019, Hairston made his first appearance in a CONCACAF Champions League match, playing the whole 90 at right wingback in a 2-0 loss to Toronto FC. Hairston suffered a knee injury on March 31 in a win over the Philadelphia Union that required surgery and forced him to miss 2 months. He returned to action on June 6 in a 2-0 loss to Nashville SC in the US Open Cup.
On January 12, 2019, Hairston was traded to the Houston Dynamo in exchange for $125,000 in General Allocation Money for the 2019 season and $50,000 in General Allocation Money for the 2020 season. Hairston made his Dynamo debut February 19th, coming on as a substitute for Alberth Elis in a 1-0 win over CD Guastatoya in the CONCACAF Champions League. He would get the start in the next game, helping the Dynamo defeat Guastatoya 2-1 to advance to the quarter-finals. Hairston made his first MLS appearance for Houston on March 2nd, coming on as a sub in a 1-1 draw with Real Salt Lake. After appearing in 9 of the first 10 games, Hairston missed three weeks with a hip injury. On June 18, he picked up his first assist for the Dynamo when he won the ball and found Tomás Martínez, who calmly put the ball into the net to give Houston a 2-0 lead over Minnesota United. However, the Loons came back in the second half to shock the Dynamo. With little end product, Hairston saw his minutes decrease as the season went on. On August 13th, head coach Wilmer Cabrera was fired due to poor results and Davy Arnaud took the reigns as the interim coach. The change in coaches was bad news for Hairston. He never saw the pitch in the 9 games with Arnaud in control, as the new coach preferred to play midseason acquisitions Christian Ramirez and Niko Hansen over Hairston, although his minutes had declined even before Arnaud took over.
Minnesota United
On November 13, 2019, Hairston was traded along with $600,000 in Allocation Money to Minnesota United in exchange for Darwin Quintero and the 3rd round pick in the 2020 MLS SuperDraft.