"a possible option should be the replacement of the for and while cycles with another option"
Why do you think that the loops themselves are the slow part? Have you profiled your code?
A quick look at your code shows that you could easily move the loop iteration vector definition before the loops, as it is indetical for all loops (currently you are pointlessly redefining exactly the same vector multiple times):
V = ceil((minimum/single_step)+1):(length(steps)-((number_surrogates-1)*(minimum/single_step)))
for a = V
for b = V
for c = V
for d = V
table_percentage(index,:) = [steps(a), steps(b), steps(c), steps(d)];
index = index+1;
Another option would be to avoid the loops entirely using ndgrid to generate the indices:
[A,B,C,D] = ndgrid(steps(V));
X = [A(:),B(:),C(:),D(:)];
table_percentage = X(sum(X,2)==1,:);
Note that this method will only work for V with a small number of elements, and you will need to adjust the indexing to suit steps and table_percentage (which you have told us nothing about).