I'm not sure if external consultants would be the better support for your company if you are going to handle really large datasets and you need to start from the ground.
Please don't get me wrong, but if ones screws up a project with so many customers, it will have PR impact on your company.
Regarding 10M tuples in one table, if you have good indexing it will be fine. We need to store several 100M tuples in one table here (sold items) which works fine on a large oracle 11g
Here is a posting from 2010 with a map of facebooks db design: Facebook database design
You may want to read the mysql documentation about partition types like this: MySQL documentation: Partinioning
MySQL supports these types:
RANGE partitioning. This type of partitioning assigns rows to
partitions based on column values falling within a given range. See
Section 18.2.1, “RANGE Partitioning”.
LIST partitioning. Similar to partitioning by RANGE, except that the
partition is selected based on columns matching one of a set of
discrete values. See Section 18.2.2, “LIST Partitioning”.
HASH partitioning. With this type of partitioning, a partition is
selected based on the value returned by a user-defined expression that
operates on column values in rows to be inserted into the table. The
function may consist of any expression valid in MySQL that yields a
nonnegative integer value. An extension to this type, LINEAR HASH, is
also available. See Section 18.2.3, “HASH Partitioning”.
KEY partitioning. This type of partitioning is similar to
partitioning by HASH, except that only one or more columns to be
evaluated are supplied, and the MySQL server provides its own hashing
function. These columns can contain other than integer values, since
the hashing function supplied by MySQL guarantees an integer result
regardless of the column data type. An extension to this type, LINEAR
KEY, is also available. See Section 18.2.4, “KEY Partitioning”.