McCullough speelde in de jeugd van Dungannon Swifts en op zestienjarige leeftijd werd hij weggeplukt door Manchester United. Bij de Engelse topclub wist hij niet door te breken in het eerste elftal. De verdediger werd eind januari 2013 voor de duur van één maand gestald bij Cheltenham Town.[1] Voor Cheltenham kwam hij in één competitiewedstrijd uit. In de zomer van 2013 was McCullough op proef bij Doncaster Rovers. Uiteindelijk mondde dit uit in een verbintenis bij de club.[2] Zijn debuut voor Doncaster maakte de centrumverdediger op 26 november 2013, toen met 2–0 verloren werd van Charlton Athletic. Coach Paul Dickov liet hem het gehele duel meespelen.[3] In 2014 degradeerde de club en in 2016 opnieuw. Ondanks de slechte resultaten kreeg McCullough in juli 2016 een nieuwe verbintenis voor drie seizoenen.[4] Ruim een week later raakte hij dermate zwaar geblesseerd dat hij het gehele seizoen 2016/17 aan zich voorbij moest laten gaan.[5] In de zomer van 2018 huurde Tranmere Rovers McCullough voor een halfjaar.[6] Deze huurovereenkomst werd in de winterstop van het seizoen 2018/19 verlengd tot het einde van de jaargang.[7] Na zijn vertrek in de zomer van 2019 zat McCullough een halfjaar zonder club. Hierna tekende hij voor zijn oude club Tranmere Rovers. Medio 2020 nam Glentoran hem transfervrij over.[8] McCullough tekende voorafgaand aan het seizoen 2024/25 bij Carrick Rangers.[9]
McCullough maakte zijn debuut in het Noord-Iers voetbalelftal op 30 mei 2014, toen met 1–0 verloren werd van Uruguay door een treffer van Cristhian Stuani. Hij mocht van bondscoach Michael O'Neill starten als basisspeler en hij speelde het gehele duel mee. De andere debutanten dit duel waren Paul Paton (Dundee United) en Ryan McLaughlin (Liverpool).[11] Door O'Neill werd hij opgenomen in de voorselectie voor het EK.[12] Uiteindelijk haalde McCullough de definitieve selectie ook.[13] Op het EK kwam de verdediger niet in actie. Uiteindelijk werd debutant Noord-Ierland in de achtste finale uitgeschakeld door Wales.