Tuple indexing taking time?

I think so. They only stop being equivalent when you have them inside type parameters (which are invariant):

julia> struct Wrapper{T}; a :: T; end

julia> f(x :: Wrapper{Real}) = x.a
f (generic function with 1 method)

julia> g(x :: Wrapper{T}) where {T<:Real} = x.a
g (generic function with 1 method)

julia> x1 = Wrapper{Real}(1.0)
Wrapper{Real}(1.0)

julia> x2 = Wrapper{Float64}(1.0)
Wrapper{Float64}(1.0)

julia> f(x1)
1.0

julia> f(x2)
ERROR: MethodError: no method matching f(::Wrapper{Float64})
Closest candidates are:
  f(::Wrapper{Real}) at REPL[2]:1
Stacktrace:
 [1] top-level scope at REPL[7]:1

julia> g(x1)
1.0

julia> g(x2)
1.0

In this case the short way to write g would be:

julia> h(x :: Wrapper{<:Real}) = x.a
h (generic function with 1 method)

julia> h(x1)
1.0

julia> h(x2)
1.0