Sounds like a classic use-case for relational databases (MySQL, Oracle, etc). I wouldn't worry too much about having 5M rows, if the lookup columns are indexed (i.e. you use some additional disk space but get fast lookups) you will be able to search and join no problem.
If your 'order of' values are in the right ballpark, you are looking at something like 10,000,000,000 books, so this would be your main size issue. At a measly 1000 characters per review you are looking at 10TB of data for these alone. At that scale, it might be worth starting to look at 'Big Data' solutions such as Hadoop/Hbase. However, these are typically not optimised for fast lookup, and are more designed for batch-job analytics, so would need some tweaking for what you want.
Hope that helps!