آیا لزوما" احتیاجی به Hash کردن "نام کاربری" نیز هست؟
به نظر من برای بالاتر بردن امنیت این کار الزامی است. چرا که در صورت نفوذ به db هم نفوذگر را کاملا سردرگم خواهد کرد و امکان پیدا کردن اینکه چه username ی دارای چه مقدار hash‌شده ای برای password اش است، بسیار کم می کند.

همچنین معمولا" هنگامیکه برنامه در حال اجراست در قسمتی از آن نام کاربری درج میشود - به صورت Plain-Text -
خوب از این نظر نیز مشکلی نخواهد بود چرا که اصلا اجباری نیست تا مقدار واقعی username رو دوباره از db خوانده و آنرا نمایش داد (در طول برنامه) --البته این کار امکان پذیر نیز نحواهد بود به دلیل hashing.
برای این کار پس از اعتبار سنجی اطلاعات login در صورت صحت اطلاعات ورودی، مقدار plain text مربوط به username که در زمان login وارد شده خوانده شده و به عنوان username آن کاربر در طول برنامه نشان داده می شود.

حدس زدن یا به هر حال بدست آوردن نام کاربری زیاد دشوار نخواهد بود
این امر چه تاثیری بر روند کار می تواند داشته باشد؟ فرض کنیم که فردی بتواند به درستی نام کاربری را حدس بزند، اما در صورتیکه کلمه عبور را اشتباه وارد کند نمی تواند بفهمد که نام کاربری اش درست بوده.
آیا بهتر نیست روش Attach کردن Salt به پسورد را تغییر دهیم؟ بدینصورت که به جای اینکه Salt را مستقیما" به انتهای پسورد اضافه کنیم ، آن را با یک روش مشخص در طول پسورد پخش (Distribute) کنیم،
موافقم
روش Salted-Hash عموما" بدین صورت است که ابتدا مقدار مورد نظر(پسورد ، نام کاربری ...) با Salt (که میتواند جهت امنیت بیشتر به طور رندوم تولید شود) ترکیب شده و مقدار بدست آمده از ترکیب این دو ، Hash میشود ، حال ما میتوانیم برای اینکه به قول شما Salt تا میزانی از دید پنهان بماند ، آن را به انتهای این مقدار Hash شده ی به دست آمده اضافه نماییم ،
اما در اینصورت ما یک salt داریم و در صورت لو رفتن آن (به هر نحوی) هم username رو از دست داده ایم و هم password را (یعنی امکان این امر افزایش پیدا میکنه).
اگر هر کدام را جداگانه hash‌ کنیم در اینصورت salt های متفاوتی خواهیم داشت و امکان این که هر دو salt‌ لو بروند کمتر خواهد بود. در پایان میتوان برای نگهداری مقادیر hash شده username و password را با هم ترکیب کرد (با الگوریتم های مناسب) و سپس در db نگهداری کرد.

روش پیشنهادی شما برای محافظت از آین قسمت خاص از کد چیست؟
به نظر من بهتر است این بحث را به آینده موکول نمایید تا مسیر بحث منحرف نشود زیرا این مسئله جزو پیاده سازی محسوب می شود . (البته این فقط پیشنهاد است)