Unfortunately, for purposes of entries in a UNIQUE constraint or index, all NULLs are considered equal (this despite the fact that NULLs are not considered equal to one another everywhere else) (unless SET_ANSI_NULLS is set false to disable SQL-92 standard behavior). As you've seen, SET_ANSI_NULLS does not affect the behavior of NULLs in index/constraints. Thus, you can only have one row with a NULL value in a UNIQUE constraint or index.
I know of no way around this except via a CHECK constraint as you suggest.
Custom Apps, Inc.