Collision on generated mesh

According to the documents, mesh colliders are only constructed when the mesh is placed into the scene.

Is it possible to force a collider component to construct itself based on a mesh filter which you yourself have constructed at runtime? i.e. if geometry changes?

I.e. if I were to make a parametric spiral mesh, for example, and wanted to be able to tweak how many degrees it generates through at run time, and then wanted the result to be collidable, how would I go about that?

If a prefab was instantiated into the scene, and the geometry was constructed in the "Start()" function, would that be early enough to let the mesh collider construct itself?

Or should I add a mesh collider to the game object at runtime after the mesh data is set up?

All you need to do is add the mesh collider component to the same object after you've finished generating the procedural mesh itself. It's fine if it's all in the Start() method. For example:

void Start() {

    // create new Mesh Filter & Mesh objects
    var meshFilter = AddComponent<MeshFilter>();
    var mesh = new Mesh();

    // set up mesh
    mesh.name = name;
    mesh.vertices = myVerts;
    mesh.triangles = myTris;
    mesh.RecalculateNormals();
    meshFilter.mesh = mesh;
    mesh.RecalculateBounds(); 

    // add collider! 
    AddComponent<MeshCollider>();
}