If you have, as you say, a different measurement time for all measurements (T is a matrix, not a vector), you can do what you want with one call to arrayfun as follows:
VI = arrayfun(@(x)(interp1(T(x,:),V(x,:),TI)), 1:size(V, 1), 'UniformOutput', false); VI = cell2mat(VI');
arrayfun is like a loop, but since it is a matlab internal function, it can be faster. It returns a cell of vectors, so the second line ensures that you have a matrix as output. You may not need this - it depends on what you later do with the data.
If, on the other hand, the measurements were performed at the same time for different values ββof N (T is a vector of size S, not a matrix, or, in other words, all rows from T are equal), you can interpolate interp1 in a single call.
VI = interp1(T(1,:), V', TI)
Here you need to transpose V, as interp1 interpolates inside the columns. This is because MATLAB stores matrices in columns (columns are contiguous in memory). If you pass V as an SxN matrix, this potentially allows you to parallelize interp1 more efficiently, since all processors can access memory more efficiently. Therefore, I would suggest that you transfer your matrices to all of your code, unless, of course, you rely on this exact data format somewhere else for performance reasons.
Edit Due to the layout of the matrix columns, your source code can be improved by moving the matrices and the working column. The next version on my computer is about 20% higher for N = 1000, S = 10000 and TI 10000 elements. This is likely to grow with system size due to more efficient use of memory bandwidth.
tic; VI = zeros(size(TI,2), size(V,2)); for j = 1:size(V,2) VI(:,j) = interp1(T(:,j),V(:,j),TI); end toc;