grep is going to be working on a line by line basis, so grep ^09 is doing just what you asked it to do by finding any line that begins with 09
You probably want to use awk, it would be the easiest thing to do. If the data is in the same format that you provided, you could do something like the following:
awk '$4 == "0000001234"' file
By default (if you do not tell awk to print anything specific), it will print the entire record/row. So the above will only print a row if the fourth field is what is shown.
You could also use word boundaries in grep:
-bash-3.2$ cat test.txt
09 0 XXX 0000001234 Z 1
09 0 XXX 0000001234 Z 1
09 0 XXX 50000001234 Z 1
09 0 XXX 40000001234 Z 1
09 0 XXX 30000001234 Z 1
09 0 XXX 10000001234 Z 1
-bash-3.2$ grep "\<0000001234\>" test.txt
09 0 XXX 0000001234 Z 1
09 0 XXX 0000001234 Z 1