Michelson lambdas cannot mutate storage, when executing a lambda you cannot access anything more than the argument of the lambda.
Views are more expensive than lambdas because they need to read information about the viewed contract (its storage, its balance, and the view code) and a bit of typechecking (the view code is only typechecked at contract origination and when the view is called). There is certainly room for optimization here but I don’t think we will ever manage to consume as few resources as lambdas.