Do i have to load content in the load content function or can i do it from anywhere?
You can do it anywhere! I have a game that (and I think lots of AAA games do this) load content that the player is moving towards and unload content that the player has already moved past.
If the loads cause lag in your game you can do it on another thread.
I think ContentLoaders can only unload everything so you can either have 1 ContentLoader for each group of content OR just not use it and load your content manually (ie. Texture2D.FromStream and then Texture.Dispose()).