It is very difficult to answer such an extensive question about scalability .
Firstly, updating the hardware on one machine is not a long - not even a short-term option, since you plan on exponential growth (x2 every 3 months is big, starting from 2M lines per month), So you need to find a distributed scalable hardware architecture.
Then two main options come to mind:
Stick to SQL
If you use SQL repository for ever-growing tables, you will need to choose clustering and replication . The latter, from my point of view, is often more cost-effective and faster than the first, but a little more difficult to solve.
Here you will find a very interesting article about Advanced MySQL Replication Techniques .
You can then start by partitioning, or better, sharding , as you mentioned earlier.
Please note that some MySQL products appear to offer auto-fragmentation clusters .
Another option, obviously, involves using NoSQL technologies on your monster tables. Distributed storage systems of key importance are almost not required in terms of scalability, which means linearity no more.
Another point is that key values ββwork exquisitely with distributed caches, such as the well-known Memcached , very simple, with API settings in most languages, providing really good performances at a very low price.