According to this Cisco documentation, the next hop tracking is enabled by default for all versions of IOS. In addition it says:
BGP next-hop address tracking is enabled by default for IPv4 and VPNv4 address families. It is also enabled by default for the VPNv6 address family as of Cisco IOS Release 12.2(33)SB6.
Concerning BFD, there is a difference between functionality and what is actually being detected.
Next Hop Address Tracking will cause a BGP peer to preemptively remove a route from the BGP table if the next hop of that route is no longer in the routing table. Once the next hop IP is removed from the routing table, a next hop scan is initiated after 5 seconds, by default. This can be changed to 0 so that the scan occurs immediately.
BFD works differently. It creates BFD peerings between routers. BFD will send hello packets at sub-second intervals to make sure the neighbors are “alive”. If a BGP neighbor is no longer available, the BGP protocol immediately considers the neighbor down, and subsequently all routes learned from that neighbor must be reconverged,.
What’s the difference? The first is triggered by a change in the routing table, which itself is a process that may take several seconds, or tens of seconds depending on the actual failure and the underlying IGP being used. The second is triggered by a failure in BGP neighborship and “realization” of the changes are much more immediate.
So the two processes actually detect something different. You can have a neighbor fail without having the next hop fail, or vice versa.
I hope this has been helpful! Stay healthy and safe!