That’s not a property of your shell (or php or cat). It’s your terminal that manages the output.
Use the tabs
command to change the behavior:
$ tabs 4
$ echo -e "a\tb"
a b
$ tabs 12
$ echo -e "a\tb"
a b
(tabs
is specified in POSIX, and output above is “faked”: it’s still a tab character between the two letters.)