Haklısın, int değerini direkt index olarak ele aldığı için direkt eliyle koymuş gibi buluyordur ama string ifade mutlaka bir döngüye giriyordur haliyle performans kaybı olabilir. Tabi bu performans kaybı milyonluk sorgularla anca belli olur diye düşünüyorum.
Tartışmalarda guid birden fazla veritabanın senkronize olması durumunda kullanılmalı deniyor. Örneğin x db ile y db'yi eşitleyeceğiz diyelim, ikisinde de aynı int id varsa sorun olur ama bu guid/uuid de daha düşük bir ihtimal (2128).
Diğer soruna gelecek olursak, bence int veya username şeklinde aratman arasında yine milyonluk bir db yoksa çok ciddi fark görmeyeceksin, ms hızında sonuç alırsın. Ama birden fazla sütunda LIKE şeklinde arama yapacaksan performans kaybını hissetmeye başlarsın.