WSLはWindowsのバイナリを実行できますが、hoge.exeをhogeとして実行できません。
数が多くない場合は alias hoge=hoge.exeとしておけばよいですが、それも面倒な場合もあります。
ところで、Bashではcommand_not_found_handleというシェル関数が存在する場合、コマンドが存在しない時にこのシェル関数を呼びます。
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBY
これを利用して、hoge "a" "b c"とコマンドを打ちコマンドが存在しない場合に、 hoge.exe "a" "b c"としてコマンドを実行することができます。
function command_not_found_handle(){unset command_not_found_handle
"$1.exe""${@:2}"}unsetしておかないとコマンドが存在しない時に再帰ループに陥るので、unsetするといい感じになります。
command_not_found_handleを呼ぶときはサブシェルで実行されるため、unsetをしても元のシェルには影響はありません。
command_not_found_handleを使う方法の欠点は、2回コマンド実行を行うケースがあるため、それがネックになる可能性があります。
そのパフォーマンスも惜しい場合は、hashであらかじめ有効なコマンドを設定しておく方法が使えるかもしれません(未調査)WSLをあきらめるという手もあると思います
おまけ
"${@:2}"は部分文字列展開を配列@に対して行っており、"$2" "$3" ... "$n"と同じ意味になります。
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBB
${parameter:offset:length}
parameter が @ ならば、結果は offset から始まる length 個の位置パラメータになります。
参考
WSLのIssueが上がっていますが、WSL側では対応せず、ユーザにあった方法で回避してもらう方針のようです。
https://github.com/microsoft/WSL/issues/2003
(個人的にもWSLにWindowsの都合はあまり持ち込まないほうが良いと思います。Linuxの互換レイヤーとして頑張ってもらいたいですし)