Python 147
def t(n):
p=o='';r=0 # p is previous string, o is output string, r is recycled bitmap
while n and r<1023: # 1023 is first 10 bits set, meaning all digits have been recycled
s=`n`;i=len(s) # s is the current string representation of n
while p.endswith(s[:i])-1:i-=1 # find common ending with prev; s[:0] is "",
# which all strings end with
for j in s[:i]:r|=1<<int(j) # mark off recycled bits
o+=s[i:];p=s;n-=1 # concatenate output, prepare for next number
print o # done
First level indent is space, second level is tab char.