How to let users choose to hide fields in their profile?
Create a checkbox field just below the field you want to hide on user profile page.
Now override the settings in template file.


Please follow the link allow users to choose whether certain profile fields are visible or hidden for detailed steps. 

Also you can try out Profile2 Privacy module.


  This module extends Profile 2 by allowing administrators to create
  privacy levels as predefined groups or sets of profile fields on a per
  role basis. Users can then select from among the privacy levels to
  apply access control to their profile.