If you have, as you say, different time of measurement for all measurements (T is a matrix and 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 similar to a loop, but since it is an internal matlab function it might be faster. It returns a cell of vectors, so the second line makes sure that you have a matrix as output. You might not need it - it depends on what you later do with the data.
If on the other hand the measurements have been taken at the same times for different values of N (T is a vector of size S, and not a matrix, or in other words all rows of T are equal) you can interpolate in one call to interp1.
VI = interp1(T(1,:), V', TI)
Here you have to transpose V since interp1 interpolates within columns. This is because MATLAB stores matrices column-wise (columns are contiguous in memory). If you pass V as an SxN matrix it potentially allows for more efficient parallelization of interp1, since all CPUs can access the memory in a more efficient manner. Hence, I would suggest you transpose your matrices in your entire code, unless of course you rely on this exact data layout somewhere else for performance reasons.
Edit Because of the column layout of matrices your original code can be improved by transposing the matrices and working column-wise. The following version is around 20% faster on my computer for N=1000, S=10000 and TI of 10000 elements. It will likely grow with system size due to a more efficient memory bandwidth utilization.
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;