This is cumbersome, but perhaps faster:
x = min(start_idx):max(end_idx);
m = sum(bsxfun(@ge,x,start_idx(:)),1)==numel(end_idx)-sum(bsxfun(@le,x,end_idx(:)),1)+1;
result = x(m);
It correctly handles empty ranges, i.e.
start_idx = [1 4 16]
end_idx = [2 6 15];
gives
result =
1 2 4 5 6