You can "frontend" the SVD of a tall/skinny matrix using a QR decomposition, then just SVD the remaining small/square matrix R. Here's a snippet of matlab code that computes the pseudoinverse based on this idea:
clear all
close all
% Make input.
I = 10000;
J = 20;
A = rand(I,J);
% Pseudoinverse B := pinv(A)
tic
B = pinv(A);
toc
norm(A - A*B*A,'fro')
norm(B - B*A*B,'fro')
% Pseudoinverse C := V*inv(S)*(Q*U)', based on qr(A) and svd(R).
tic
[Q,R] = qr(A,0);
[U,S,V] = svd(R);
C = V*inv(S)*(Q*U)';
toc
norm(A - A*C*A,'fro')
norm(C - C*A*C,'fro')
Example output:
Elapsed time is 0.0120101 seconds.
ans = 6.7672e-013
ans = 2.1392e-016
Elapsed time is 0.00999999 seconds.
ans = 6.7672e-013
ans = 2.1392e-016
Maybe it was a little faster? Though to be honest, a high quality implementation of SVD would already incorporate this idea. This might be what you meant already by "traditional SVD econ method", just thought I'd point it out.