Nel 2005 corre con una Malaguti125 per il team Malaguti Reparto Corse, ottenendo 3 punti nel GP di Cina e terminando la stagione al 33º posto, anche se non corre tutte le gare in calendario, perché dopo il GP d'Australia il suo posto viene preso da Jules Cluzel. Nel 2006 ha continuato a correre ancora nella classe 125, con il numero 15, con una Aprilia RS 125 R del team WTR Blauer USA, senza ottenere punti. In questa stagione è costretto a saltare il GP di Spagna per infortunio e dopo il Gran Premio della Malesia viene sostituito da Andrea Iannone, anche se Pirro corre altre due gare con la Honda RS 125 R del team Humangest Racing.
Nel 2007 e nel 2008 si è aggiudicato il Campionato italiano velocità nella classe superstock 1000 in sella alla Yamaha YZF-R1 del team Yamaha Lorenzini by Leoni,[1] correndo negli stessi anni contestualmente anche la Superstock 1000 FIM Cup.
Nel 2009 partecipa al campionato mondiale Supersport con una Yamaha YZF R6 del team Yamaha Lorenzini by Leoni. Il 20 giugno 2009 ottiene la sua prima pole position nel mondiale Supersport a Misano,[2] non riuscendo, però, a sfruttarla ritirandosi in gara per problemi tecnici.[3] Conclude la sua prima stagione al dodicesimo posto nella classifica generale con 70 punti,[4] ottenendo come miglior risultato in gara il sesto posto nel Gran Premio del Portogallo tenutosi sul circuito di Portimão.[5] Con la stessa moto e lo stesso team si laurea campione italiano Supersport.[6]
Nel 2011 viene ingaggiato dal team Gresini Racing Moto2 questa volta come pilota titolare; il suo compagno di squadra è Yūki Takahashi. Ottiene un terzo posto al GP di Gran Bretagna ed anche la pole position nel Gran Premio della Comunità Valenciana davanti al suo compagno di squadra Takahashi, vincendo domenica 6 novembre la sua prima gara nel motomondiale su pista bagnata, esibendo il numero 58 in memoria di Marco Simoncelli.[8] Termina la stagione al 9º posto con 84 punti. Nello stesso anno entra a far parte delle Fiamme Oro, il Gruppo sportivo della Polizia di Stato. Nel 2012 passa in MotoGP, rimanendo nel team Gresini, che gli affida una FTR MGP12 che sfrutta il regolamento per le moto CRT. Ottiene come miglior risultato un quinto posto in Comunità Valenciana e termina la stagione al 15º posto con 43 punti.
Nel corso del 2013, il team Ducati MotoGP ha ingaggiato Michele Pirro come collaudatore per lo sviluppo della nuova GP13. Corre in Spagna, Italia e Comunità Valenciana come wild card e in Francia, Catalogna, Olanda, Germania, Repubblica Ceca, Gran Bretagna e San Marino come sostituto dell'infortunato Ben Spies nel team Pramac Racing. Nonostante Spies fosse infortunato fino al termine della stagione, Pirro non proseguì nella sostituzione del pilota statunitense in quanto impegnato in importanti test per la Ducati.[9] Corse le ultime due prove del mondiale Superbike in sostituzione dell'infortunato Carlos Checa sulla Ducati 1199 del team Alstare.
Nel 2014, a causa dell'infortunio del pilota titolare Cal Crutchlow, la Ducati lo chiama nuovamente in Moto GP per correre il Gran Premio d'Argentina. Corre come wild card in Spagna, Italia, Catalogna, Repubblica Ceca e Comunità Valenciana. Totalizza 18 punti, quindi il 19º posto in classifica finale. Nel 2015 corre nei Gran Premi di Italia, San Marino e Comunità Valenciana come wild card sempre con la Ducati. Totalizza 12 punti che gli valgono il ventunesimo posto in classifica finale. Sempre nel 2015 partecipa ai gran premi di San Marino e Spagna del mondiale Superbike, in sostituzione dell'infortunato Davide Giugliano alla guida della Ducati Panigale. Ottiene punti in tutte e quattro le gare disputate, chiudendo ventunesimo in classifica con 35 punti all'attivo. Sempre nel 2015, vinse il suo primo campionato italiano classe Superbike.
Nel 2016 prende parte ai Gran Premi di Argentina, Americhe e Spagna, in sella alla Ducati Desmosedici GP15 del team OCTO Pramac Yakhnich in sostituzione dell'infortunato Danilo Petrucci, a quelli d'Italia e Austria come wild card con la Ducati Desmosedici ufficiale, a quelli di Catalogna e Olanda in sostituzione dell'infortunato Loris Baz sulla Ducati del team Avintia Racing,[10] e a quelli di Misano e Aragona in sostituzione dell'infortunato Andrea Iannone sulla Ducati totalizzando 36 punti mondiali e il diciannovesimo posto in classifica piloti. In questa stagione, pur essendo il pilota con più vittorie nei singoli Gran Premi, non conquista il campionato Italiano Superbike a causa di un'irregolarità tecnica.[11]
Nel 2017 partecipa, con una wild card, ai Gran Premi d'Italia, San Marino e Comunità Valenciana con la Ducati Desmosedici del Ducati Team ufficiale, totalizzando 25 punti. Nel 2018 partecipa come wild card con la Ducati al Gran Premio d'Italia, ma nelle prove libere è vittima di uno spettacolare quanto pericoloso incidente, quando alla fine del rettilineo viene sbalzato via dalla moto a causa di una rottura all'impianto frenante, provocandosi lesioni multiple. Dopo aver recuperato da tale infortunio riesce a correre anche nel Gran Premio di San Marino. In Malesia gareggia in sostituzione dell'infortunato Jorge Lorenzo.[12] Corre in Comunità Valenciana come wild card. Ha totalizzato 14 punti e il 22º posto nella classifica piloti. Nel 2019 partecipa al Gran Premio d'Italia in qualità di wild card con il team ufficiale Ducati.[13] Chiude la gara al settimo posto. Partecipa inoltre, sempre come wild card, al Gran Premio di Misano nel campionato mondiale Superbike ottenendo dieci punti e il ventiquattresimo posto in classifica finale.[14] Corre nuovamente in MotoGP come wild card a Misano e a Valencia, totalizzando 9 punti e chiudendo, come la stagione precedente, al ventiduesimo posto. Vince il CIV nella categoria Superbike, conquistando 9 vittorie su 12 gare.
Nel 2020 corre in MotoGP in Austria e Stiria sulla Ducati del team Pramac Racing in sostituzione dell'infortunato Francesco Bagnaia,[15] totalizzando 4 punti con il dodicesimo posto in Austria. Per quanto concerne il CIV Superbike, complici un numero consistente di ritiri, non va oltre l'ottavo posto in classifica conquistando comunque due vittorie.
Nel 2021 prosegue la sua avventura nel CIV Superbike insieme al Barni Racing, nuovamente in sella alla Ducati Panigale V4R del team bergamasco.[16] Si laurea per l'ottava volta campione d'Italia con undici vittorie ed un secondo posto nelle dodici gare disputate. Nello stesso anno corre in MotoGP in Italia in sostituzione dell'infortunato Jorge Martín sulla Ducati Desmosedici e i Gran Premi di San Marino ed Emilia Romagna come wild card sulla Ducati ufficiale. Ha totalizzato 12 punti.[17] Nel 2022, dopo aver vinto sette gare nella prima parte di stagione, conquista un ampio margine in termine di punti riuscendo a resistere alla rimonta di Alessandro Delbianco e si laurea campione Italiano Superbike per la sesta volta,[18] nove volte considerando tutte le classi.[19] In questa stessa stagione inoltre, disputa tre Gran Premi da wild card in MotoGP col team ufficiale Ducati, non ottenendo punti.[20]
Nel 2023 è nuovamente titolare nel campionato italiano, nonostante sette vittorie in gara, si classifica secondo a soli tre punti da Lorenzo Zanetti.[21][22] Contestualmente al campionato nazionale disputa diverse gare in MotoGPː in alcuni casi come wild card col team Aruba in altri come sostituto dell'infortunato Enea Bastianini totalizzando cinque punti iridati.[23]
Nel 2024, sempre con Barni Racing,[24] centra sette vittorie e due secondi posti nel CIV Superbike laureandosi campione italiano per la decima volta.[25] Prende inoltre parte, in qualità di wild-card al Gran Premio di Misano Adriatico del campionato mondialeSuperbike per il team ufficiale Aruba.it Racing - Ducati. In gara 1 arriva un tredicesimo posto raccogliendo 3 punti, mentre nella Superpole Race non riesce a raggiungere la zona punti. Termina il weekend con un ritiro in gara 2. Continua il suo lavoro da collaudatore Ducati durante i test MotoGP, ma non disputa nessuna wild-card in campionato a causa dei nuovi regolamenti per le concessioni imposte dalla federazione internazionale.[26]