Esordisce nella classe 125 del motomondiale nel 2003, correndo il Gran Premio casalingo in qualità di wildcard a bordo di un'Aprilia RS 125 R del RCGM Team, senza ottenere punti. Nel 2004 corre nuovamente in Italia, ancora come wildcard con il RCGM Team F.M.I., ed al GP della Comunità Valenciana in sostituzione dell'infortunato Marco Simoncelli con il team Rauch Bravo, in entrambe le gare sempre su Aprilia.
Nel 2005 corre con una Malaguti 125 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,[2] 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.[3] Il 20 giugno 2009 ottiene la sua prima pole position nel mondiale Supersport a Misano[4], non riuscendo, però, a sfruttarla ritirandosi in gara per problemi tecnici[5]. Conclude la sua prima stagione al dodicesimo posto nella classifica generale con 70 punti[6], ottenendo come miglior risultato in gara il sesto posto nel Gran Premio del Portogallo tenutosi sul circuito di Portimao.[7] Con la stessa moto e lo stesso team si laurea campione italiano Supersport.[8]
Il 19 novembre 2009 viene annunciata la sua partecipazione nel 2010 al campionato mondiale Supersport con una Honda CBR600RR del team HANNspree Ten Kate Honda.[9]
Sempre nel 2010 corre nel motomondiale il GP d'Aragona in Moto2, in sostituzione dell'infortunato Vladimir Ivanov sulla Moriwaki MD600 del Gresini Racing Moto2, ottenendo due punti.
Nel 2011 viene ingaggiato dal team Gresini Racing Moto2 questa volta come pilota titolare; il suo compagno di squadra è Yuki 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 Yuki Takahashi, vincendo domenica 6 novembre la sua prima gara nel motomondiale su pista bagnata, esibendo il numero 58 in memoria di Marco Simoncelli. 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 nuovo 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 tester per lo sviluppo della nuova GP13. Corre in Spagna, Italia e Comunità Valenciana come wildcard e in Francia, Catalogna, Olanda, Germania, Repubblica Ceca, Gran Bretagna e San Marino come sostituto dell'infortunato Ben Spies nel team Pramac Racing. Nonostante Ben Spies sia infortunato fino al termine della stagione, Pirro non proseguirà nella sostituzione del pilota statunitense in quanto impegnato in importanti test per la Ducati.[10] Corre 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 wildcard in Spagna, Italia, Catalogna, Repubblica Ceca e Comunità Valenciana. Totalizza 18 punti.
Nel 2015 corre nei Gran Premi di Italia, San Marino e Comunità Valenciana come wildcard sempre con la Ducati. Totalizza 12 punti che gli valgono il ventinesimo 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 ufficiale. Ottiene punti in tutte e quattro le manches disputate chiudendo ventunesimo in classifica con 35 punti all'attivo.
Nel 2016 prende parte ai Gran Premi di Argentina, Americhe e Spagna, in sella alla Ducati Desmosedici GP15 del team Pramac in sostituzione dell'infortunato Danilo Petrucci, a quello d'Italia come wildcard a bordo della Ducati Desmosedici ufficiale e a quello di Catalogna[11] in sostituzione dell'infortunato Loris Baz sulla Ducati del team Avintia, totalizzando 19 punti mondiali.