◆ 2 つ比較するほうが速い
◆ どっちも高速すぎるので手書きするときにわざわざ 2 つと比較する必要はなし
◆ Babel の変換とかではこっちが使われてる

?? 演算子の polyfill を見てると

const value = x !== null && x !== undefined ? x : 2

のようにわざわざ null と undefined 両方と比較していました

const value = x != null ? x : 2

でも結果は一緒になりますし見やすいです
普段使わない == ですが null か undefined のどっちかとして使う場合のみわざわざ比較を 2 つ書かなくていいように == を使ってます
パフォーマンス的にも 2 つ比較するよりは == null のほうが早そうな気がします
null か undefined って決まってるので JavaScript でその比較する処理を書くよりも内部的に最適な処理をしてくれそうな気がします

とりあえず試してみました

const f = x => {
return (x === null || x === undefined) ? 1 : 2
}
const g = x => {
return x == null ? 1 : 2
}

function measure(){
console.time("f")
for(let i=0;i<1000000;i++){
f(1)
f("foo")
f(false)
f(null)
f(undefined)
}
console.timeEnd("f")

console.time("g")
for(let i=0;i<1000000;i++){
g(1)
g("foo")
g(false)
g(null)
g(undefined)
}
console.timeEnd("g")
}

f は null と undefined の両方と比較する関数
g は == を使って null と比較する関数です

これらに 1 とか false とか null とか 5 種類の値を入れます

実行してみるとかなり速くて 5 種類の引数で 5 回呼び出しを 100 万回でも 3ms 程度で終わりました (Chrome)
ここまで来ると気にするだけ無駄なレベルです

差を見てみると 一応毎回 g のほうが遅くて差はだいたい 0.3ms (300μs) くらいです
ここまで小さいと他の PC の処理の状態で全然違うようになりそうな気もしますが 何度か実行してもだいたいこれくらいでした
一応 30 秒かかれば 3 秒違う程度に差はあるので パフォーマンスを求めるなら 2 種類の比較を使ったほうが速いという結果です

普段はわざわざ null と undefined の 2 種類の比較を書くなんて面倒な上に読みづらいので使いませんが Babel で変換する部分だとパフォーマンス優先で 2 種類の比較の方を選択してるのだと思います
コード量が数バイト増えるデメリットがあるといえばありますが どっちも影響が小さすぎてどっち優先すべきなのかもわからなくなってくるくらいです

ただ個人的には == null は null か undefined の比較と決まってるので JavaScript レベルで 2 つの比較処理を書くよりは高速であってほしかったです

ちなみに Firefox の場合は 7ms くらいで差は Chrome のときと同じ程度でした