I am facing the same problem as you. It may be too late to reply, but I suggest one solution. This code does not involve any for loop.
tmp=TR.ConnectivityList;
groupnumber=1;
subTR=cell(1,1);
while ~isempty(tmp)
fprintf('Finding group #%d', groupnumber);
poolvec=tmp(1,:);
poolvecsize=3;
while length(poolvecsize)==1 || poolvecsize(end)>poolvecsize(end-1)
ind=any(ismember(tmp,poolvec),2);
poolvec=unique([reshape(tmp(ind,:),1,[]) poolvec]);
poolvecsize=[poolvecsize length(poolvec)];
fprintf('.');
end
fprintf('\nCumulative number of faces: %d\n', sum(ind));
subTR{groupnumber}=tmp(ind,:);
tmp=tmp(~ind,:);
groupnumber=groupnumber+1;
end