試してみたらarray[0]よりarray.firstのほうが高速でした。15%くらい。
これだけでArray.firstの存在に納得しました。

コード:
a = [1]
1000000.times do
a[0] ; a[0] ; a[0] ; a[0] ; a[0]
a[0] ; a[0] ; a[0] ; a[0] ; a[0]
end

実行結果:
$ time ruby hoge.rb
real 0m6.339s
user 0m4.931s
sys 0m0.040s

コード:
a = [1]
1000000.times do
a.first ; a.first ; a.first ; a.first ; a.first
a.first ; a.first ; a.first ; a.first ; a.first
end

実行結果:
$ time ruby hoge.rb
real 0m5.161s
user 0m4.134s
sys 0m0.037s