##JavaScript (ES6), 119 118118 117 bytes
f=(n,a=[2,m=3])=>a[n]||a.map(c=>a.map(d=>c<d&(d*=c)>m&&(>m?b[d]=b[d]/0||d):0),b=[])|f(n,a.push(m=b.sort((a,b)=>a-b)[0])&&a)
f = (n, a = [2, m = 3]) => // given: n = input, a[] = MU array, m = last term
a[n] || // if a[n] is defined, return it
a.map(c => // else for each value c in a[]:
a.map(d => // and for each value d in a[]:
c < d & // if c is less than d and
(d *= c) > m &&? // d = d * c is greater than m:
( b[d] = b[d] / 0 || d) // b[d] = either d or +Infinity (see 'How?')
: // else:
0 // do nothing
), // end of inner map()
b = [] // initialization of b[]
) | // end of outer map()
f( // do a recursive call:
n, // - with n
a.push( // - push in a[]:
m = b.sort((a, b) => a - b)[0] // m = minimum value of b[]
) && a // and use a[] as the 2nd parameter
) // end of recursive call
f=(n,a=[2,m=3])=>a[n]||a.map(c=>a.map(d=>c<d&(d*=c)>m&&(>m?b[d]=b[d]/0||d):0),b=[])|f(n,a.push(m=b.sort((a,b)=>a-b)[0])&&a)
for(var n = 0; n < 10; n++) {
console.log('MU[' + n + '] = ' + f(n));
}