>>261
全然検証もクソもしてないが、各先頭文字が同じ文字列数が同数と仮定して
forループの前のSEEK位置の初期化時に当たりつけて、
fseek(fp, (arg[1]<'A'?arg[1]-'a':arg[1]-'A')*(filesize/26), SEEK_SET);
ぐらいから前方、または後方に探す方が早くないか?

後ろの方の単語の検索が遅くなる度合いを、演算1行とif分岐1回で
平均化出来ると思うんだけど、微妙かな?

演算1回だからfilesize/26で良いと思うが、filesize>>5のが早いかも?