You could also say that if a { true } else { b } is "extremely clear", but yet we have a || b.
Note that you could also write that as
if let e @ true = a { e } else { b }`
so the extension of a || b for Option to
if let Some(e) = a { e } else { b }
seems like a perfectly reasonable analogue.
Why is that? Is there something rust-specific that would make things worse in rust than elsewhere? In C#, at least, I find ?? clearer and not bug-prone -- and that's even with it starting to get used in intentionally-short-circuiting situations like
this.foo = foo ?? throw new ArgumentNullException(nameof(foo));
If anything, I might guess the opposite, as putting something into a closure means that you lose much of the move-tracking and NLL goodness of rust, so having the compiler understand the control flow here might make it less error-prone than or_else. Not to mention that we know that .or(foo()) vs .or_else(|| foo()) is already a source of bugs for people.
(And, come to think of it, foo || panic("blah") gives a nicer callstack than foo.expect("blah").)