Procedural World in Unity3D
Unlike Java Lists, C# lists can be pre-initialized with values, like this:

List&lt;string&gt; names = new List&lt;string&gt;() 
{
    "arco01_2_prefab",
    ...
};


This eliminates the need to call .Add, and improves code readability as well.

In the future as well, if you ever plan to add more buildings, it'll be a pain to edit this script to include the new building names. Instead, you could declare a public variable which allows you to drag and drop the model prefabs instead:

public List&lt;GameObject&gt; buildings;


This also eliminates the need to call Resources.Load.

In addition, the namespace UnityEngine provides a class Random which can be used over the default System.Random. Unlike System.Random, UnityEngine.Random is a static class doesn't need to be instantiated, and you can just call Random.Range like this:

int randomNumber = (int)Random.Range(0, names.Count);


Other than that, there are just a few things I want to nitpick.


You don't need to call Instantiate from the GameObject class. It can just be called with out the GameObject. prefix.
In addition, the accepted Unity style for storing an instantiated GameObject is like this: 

GameObject gameObject = Instantiate( ... ) as GameObject;

If you're feeling up to dynamic typing, this also works as well (Thanks @Kroltan):

var gameObject = Instantiate( ... ) as GameObject;

You can also remove the Update function. It doesn't do anything, and can decrease performance, due to the fact that it's running many times per frame.
The general style for braces in C# is to put them on the next line, not like Java braces.
You aren't using System.Collections, so you can remove the using System.Collections;.