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


