The "where" wasnt killing my fps, but changed it to below and kept the spawnlist array a list instead of switching to a dictionary:
GameObject temp = ObjectPool.instance.spawnlist.FirstOrDefault(obj => obj.name == spawn_id.ToString());
This line in
npccontroller.cs was taking FPS down by half.
grounded = ((controller.Move(moveDirection * Time.deltaTime)) & CollisionFlags.Below) != 0;