Also if you have a nanosecond timestamp, do you actually need a monotonically increasing row ID? What for?
If you need to retrieve rows by time/order, you use the timestamp. If you need a row by ID, you use the ID.
The use-cases where you actually need to know which row was inserted first seem exceedingly rare (mostly financial / auditing applications), and even then can probably be handled with separate transactions (as you touch on).