Is it true that if I tweet to @user1 and @user2 then this tweet is public?
Yes.
But if I go to @user1's profile page and click "Tweet" to the user, then it is a private tweet?
No, Twitter doesn't have private tweets in that sense. (See below for an explanation.)
What if I go to @user1's profile page and then tweet to him but add @user2 to the tweet?
It would still be a "public" tweet, just like the above examples.
By default, all tweets are public. If you want to send a "private" tweet, where only the recipient can view it, you're talking about a direct message.
The only other way to prevent your tweets from being public is to protect your Twitter account. If your account is protected, only users that follow you will be able to see your tweets.
See these two Twitter help articles for more specifics: