Din bästa prestanda blir om du kan koda in dina "tester" i själva SQL-logiken, så att du kan koka ner allt till en handfull UPDATE-satser. Eller åtminstone få så många som möjligt gjort på det sättet, så att färre rader behöver uppdateras individuellt.
Till exempel:
UPDATE tablename set firstname = [some logic]
WHERE [logic that identifies which rows need the firstname updated];
Du beskriver inte så mycket om dina tester, så det är svårt att vara säker. Men du kan vanligtvis få in ganska mycket logik i din WHERE-klausul med lite arbete.
Ett annat alternativ skulle vara att lägga din logik i en lagrad procedur. Du kommer fortfarande att göra 350 000 uppdateringar, men de "går åtminstone inte över gränsen". Jag skulle dock bara använda detta som en sista utväg; affärslogik bör behållas i applikationslagret när det är möjligt, och lagrade procedurer gör din applikation mindre portabel.