icomplete is less obtrusive, but ido is definitely more efficient, with
its non-prefix and flex matching.
icomplete uses completion-styles, so it also has substring matching.
Currently, noone has ported ido's flex matching to completion-styles,
tho, indeed.
And, in order to not have to bother with C-j for items not present in
the existing set, with icomplete you always have type or press Tab to
get to the desired item, maybe several times, even if the item is the
first in the list.
icomplete-mode now has C-j to "select the first element", so you don't
need to press TAB or type anything to get to it.