One possibility is to use "inheritance", esp. if the objects you refer to have common fields. The schema looks like this:

    followables
        followable_id      primary key
        -- common fields

    users
        user_id            primary key references followables(followable_id)
        -- user specific fields

    pages
        page_id            primary key references followables(followable_id)
        -- page specific fields

    ...

    random_entities
        ...
        followed_id        references followables(followable_id)

This means that both `pages` and `users` "are" `followables`, have `followables`' attributes and can be referenced alike.

ORMs often create schemas like this to model inheritance, and handle the joining for you.

Do not worry about inefficiency until you can prove it is a problem.

----------------

wrt. to efficiency. Write a simple SQL script that inserts test information up to the number of rows you deem you need. Write your queries (remember, you don't want to query your entire timeline, you will normally `LIMIT` your queries), check their execution speed- with the stuff you mention I'm guessing the performance will be satisfactory. If not, post your queries and the outputs of `EXPLAIN`.