I think Swift choose this behavior of UnsafeRawPointer.init for a reason. A pointer with an address of 0 is invalid on almost every machine. So maybe it can help to prevent you from accidentally forgetting to re-assign that pointer.
Out of curiosity, why not just use UnsafeRawPointer?, it's just as efficient as plain UnsafeRawPointer in terms of memory usage.
As a general rule, there is no performance overhead to UnsafeRawPointer? vs. UnsafeRawPointer. UnsafeRawPointer? has exactly the same in-memory layout as UnsafeRawPointer, and the .none case (nil) is simply represented as 0x0 in memory—that is, it is exactly equivalent to C's null pointer.
The only time you might see any sort of runtime overhead (ignoring generics where things might not be fully specialized) would be when testing for nil, but the overhead there is again exactly the same as the overhead you'd have checking for NULL in C.
(Giant asterisk: when building with optimizations off, you will likely see additional runtime overhead, but that's just what "optimizations off" means and the same can be said of equivalent C code.)
When building with optimizations there still will be a test instruction that branches to a trap when the pointer is nil. The unsafelyUnwrapped property is a way to unwrap it without any checks at all (in -O builds).