・nilを許可する場合、メソッド実行前にnilチェックが必要になる

すまん、これよくわからん。なんのメソッドだ?
バリデーションが必要ということか?:allow_nilオプションのことだろうか。

・空で更新されたのか、本当にNULLなのか見分けがつかない

実際はNULLかもしれないのに、
空が入ってくると見分けがつかないとも言える。実際混乱する。
データがWeb経由のみから入ってくるとは限らない。

たとえば、
select count(column_name) from table_name
とやると、column_nameの値がNULLの時はカウントされない。
有効なデータ件数のカウントすらつまらん条件を入れることになる。間違いのもと。

・IS NULL検索時にインデックスがきかないケースが存在する

ビットマップインデックスならきく。
B-Treeの場合、カーディナリティーが重要になる。
絞り込み条件によってデータがざっくり15〜20%くらいまでは最低でも絞り込まれないと、
フルスキャンの方が速くなる。
形だけNULLにするとインデックスがきくことによって逆に遅くなったりする。

・NULLの扱いがDBの実装によって異なる

Oracleあたりは両者を区別してないね。というより空白はNULLで格納される。
それと空白が都合がいいという結論とどう結びつくのかわからん。
むしろ空白だと思ってたのに、NULLが入ってましたなことになるんだぞ。
where column_name = '' とかやっても絞りこまれんぞ。

Web系は特にDBまわりの扱いがおおらかすぎ。データが汚いと余計な苦労が増える。