in fact, pattern matching is usually faster than Function[{u},...] constructs and as fast as #& constructs (ignoring the compilation possibility, which has become more exciting in mma 8).
To see this, define a function at the time of the short code snippets:
SetAttributes[timeshort, HoldAll]; timeshort[expr_] := Module[{t = Timing[expr;][[1]], tries = 1}, While[t < 1., tries *= 2; t = Timing[Do[expr, {tries}];][[1]]]; Return[t/tries]]
try the following:
ClearAll[f]; f[x_] := Cos[x] Trace[f[5.]] f[5] // timeshort ClearAll[f]; f = Function[x, Cos[x]] Trace[f[5.]] f[5] // timeshort ClearAll[f]; f = Cos[#] & Trace[f[5.]] f[5] // timeshort
which give
{f[5.],Cos[5.],0.283662} 8.45641\[Times]10^-7 Function[x,Cos[x]] {{f,Function[x,Cos[x]]},Function[x,Cos[x]][5.],Cos[5.],0.283662} 1.51906\[Times]10^-6 Cos[#1]& {{f,Cos[#1]&},(Cos[#1]&)[5.],Cos[5.],0.283662} 8.04602\[Times]10^-7
that is, pattern matching and #& faster than Function . I have no idea why.
EDIT: Suppose I had to check the previously proposed question that was asked earlier ... See here essentially the same answer as me, and read the comments too for some interesting discussion.