Update
My original answer was fun but not efficient.
sfunc[r_, d_, k_] := Module[{rng, s, df, se, g, fp, su, c, ans},
rng = Range[r];
s = Rest@Subsets[rng];
df[x_?(Length@# == 1 &)] := Infinity;
df[x_] := Min[Differences@x];
se = Select[s, df[#] >= d &];
g = RelationGraph[Intersection[#1, #2] == {} &, se];
c = FindClique[g, {k}, All]
]
Now testing (the first column is d, the second column k, the third column is number of partitons):
disp[n_] :=
Grid[{#1, #2,
OpenerView[{Length[#3], #3}]} & @@@ ({##, sfunc[n, ##]} & @@@
Tuples[Range[2, n - 1], 2]), Frame -> All]
** Original Answer**
Just for fun:
r = Range[5];
s = Rest@Subsets[r];
df[x_?(Length@# == 1 &)] := Infinity;
df[x_] := Min[Differences@x];
se = Select[s, df[#] >= 2 &];
g = RelationGraph[Intersection[#1, #2] == {} &, se];
fp[u_, v_] := DeleteCases[FindPath[g, u, v, {2}, All], {{_}, {_}, {_}}]
su = Subsets[VertexList[g], {2}];
c = Catenate[fp @@@ su];
ans = Union[Sort /@ Pick[c, Sort[Flatten[#]] == r & /@ c]]
yields:
{{{1}, {2, 4}, {3, 5}}, {{2}, {4}, {1, 3, 5}}, {{2}, {1, 4}, {3,
5}}, {{3}, {1, 4}, {2, 5}}, {{3}, {1, 5}, {2, 4}}, {{4}, {1,
3}, {2, 5}}, {{5}, {1, 3}, {2, 4}}}
You could adjust to obtain desired ordering,e.g.
SortBy[#, Min[#] &] & /@ ans
yields:
{{{1}, {2, 4}, {3, 5}}, {{1, 3, 5}, {2}, {4}}, {{1, 4}, {2}, {3,
5}}, {{1, 4}, {2, 5}, {3}}, {{1, 5}, {2, 4}, {3}}, {{1, 3}, {2,
5}, {4}}, {{1, 3}, {2, 4}, {5}}}