Sono due cose diverse:

con readonly rendi il campo di sola lettura, quindi non puoi modificare il suo contenuto ma puoi selezionarlo e copiarlo. Inoltre, il valore di un campo readonly viene spedito (in get o in post) insieme a tutti i valori degli altri campi quando invii il form.

con disabled disabiliti del tutto il campo (infatti appare grigio di default) e il suo valore non viene passato quando invii il form, come se il campo non esistesse. Il valore di un campo disabled non può essere modificato o selezionato dall'utente.