Potrebbe essere il momento del partizionamento orizzontale e dello spostamento del campo BLOB in una tabella separata. In questo articolo in "Una breve nota a margine sul partizionamento verticale" l'autore rimuove un campo varchar più grande da una tabella e aumenta la velocità di una query sull'ordine di grandezza.
Il motivo è che l'attraversamento fisico dei dati su un disco diventa significativamente più veloce se c'è meno spazio da coprire, quindi lo spostamento di campi più grandi altrove aumenta le prestazioni.
Inoltre (e probabilmente lo fai già) è utile ridurre la dimensione della colonna dell'indice al suo minimo assoluto (char(32) nella codifica ascii per md5), perché la dimensione della chiave è direttamente proporzionale alla velocità del suo utilizzo .
Se esegui più inserimenti alla volta con le tabelle InnoDB, puoi aumentare significativamente la velocità degli inserimenti avvolgendoli in una transazione ed eseguendo più inserimenti in una query:
START TRANSACTION
INSERT INTO x (id, md5, field1, field2) values (1, '123dab...', 'data1','data2'),(2,'ab2...','data3','data4'),.....;
COMMIT